/////// 演示可写入的computed ///////////
function AppViewModel() {
var self = this;
self.firstName = ko.observable('Bob');
self.lastName = ko.observable('Smith');
//这是一个可以写的计算属性
self.fullNameWriteable = ko.computed({
read: function () {
return self.firstName() + " " + self.lastName();
},
write: function (value) {
var lastSpacePos = value.lastIndexOf(" ");
if (lastSpacePos > 0) { // Ignore values with no space character
self.firstName(value.substring(0, lastSpacePos)); // Update "firstName"
self.lastName(value.substring(lastSpacePos + 1)); // Update "lastName"
}
},
owner: self
});
//测试从js中修改计算属性
self.modifyFullName = function () {
self.fullNameWriteable("newFistName newLastName");
};
}
var model = new AppViewModel();
ko.applyBindings(model, document.getElementById("Demo1"));
<h1>演示可写入的computed </h1>
<hr />
<ul>
<li class="Point">
<li class="Point">
1、<b class="PointTitle">编写可以<span class="KeyWord">写</span>的<span class="KeyWord">"computed"</span>属性</b><br />
<ul class="PointDesc">
<li>computed属性一般是由其他属性计算而来</li>
<li>所以一般情况下computed属性是“只读”的</li>
</ul>
<div class="PointDemo" id="Demo1">
firstName:<input type="text" data-bind="value: firstName" /><br />
lastName:<input type="text" data-bind="value: lastName" /><br />
可以编辑的fullName:<input type="text" data-bind="value: fullNameWriteable" /><br />
js中修改fullName:<input type="button" data-bind="click: modifyFullName" value="点击修改fullName" />
</div>
<!--下面写一些特殊的提示信息-->
<div class="PSFrame">
注意:这里“计算属性”可以编辑,并且把自身的变化“反向通知”到所监控的其他属性。非常强大<br />
并且,“计算属性”本身可以在js中被修改,这种修改一样可以反馈到其他监控链条上的对象
</div>
<hr />
</li>
</ul>
<hr />
body
{
background-color: #e3e5d4;
}
.Point
{
margin: 20px,0,0,0;
}
.PointTitle
{
color:#0d8d0d;
}
.KeyWord
{
color:Red;
}
.PointDesc
{
font-family: Arial;
font-size: 15px;
color:#09acb8;
}
.PointDesc li
{
margin: 10px,0,0,0;
}
.PointDemo
{
border-style:double;
border-color:#dcd559;
min-height:100px;
font-family: Corbel;
font-size: 20px;
color: #00174f;
}
.PSFrame
{
border-style: dashed;
border-color:#78e6ef;
font-family: Corbel;
font-size: 20px;
font-style:italic;
color: #b86c00;
}
.error {
color:Red;
}
.Notice
{
font-weight: bold;
font-family:Bodoni MT Black;
color: #cd0707;
}
input[type="text"]
{
min-width:250px;
}
select
{
min-width:400px;
}
External resources loaded into this fiddle: