我的代码如下:
HTML
<select
name="data3"
size="1"
id="data3"
data-bind="options: datalist, value: profile().dat.data()[2].Value()">
</select>
JavaScript的:
$(function()
{
clientviewmodel = viewmodel();
ko.applyBindings(clientviewmodel);
});
function viewmodel()
{
var self = this;
self.profile = ko.observable(ko.mapping.fromJS($.parseJSON(datareceived)));
}
JSON:
{ "dat": {"data": [{"Value":"1"}, {"Value":"2"}, {"Value":"3"} ] } }
我的问题是,在更改选择控件时,值没有绑定。
答案 0 :(得分:2)
在绑定结束时,您还有一组额外的()
。
正确的绑定应如下所示:
<select
name="data3"
size="1"
id="data3"
data-bind="options: datalist, value: profile().dat.data()[2].Value">
</select>
演示JSFiddle。
编写Value()
时,您不会绑定到您的可观察属性本身,而是绑定到它的单向绑定的基础值。
答案 1 :(得分:1)
因为您已将viewmodel()
编写为“经典”构造函数,但未使用new
实例化它,实际上您将profile
设置为全局变量而不返回你调用它时所做的任何事情,因此实际上并没有将绑定应用到你的虚拟机上。
标准JavaScript实践是经典构造函数的名称,只有那些名称,应以大写字母开头,以提醒您需要使用new
实例化它们。
value
,datalist
需要成为您虚拟机的属性。
答案 2 :(得分:0)
您的个人资料JSON无效。
你有
{
"dat"{
"data"[
{
"Value": "1"
},
{
"Value": "2"
},
{
"Value": "3"
}
]
}
}
它应该是:
{
"dat": {
"data": [
{
"Value": "1"
},
{
"Value": "2"
},
{
"Value": "3"
}
]
}
}
在这些情况下,JsonLint.com是一个有用的工具