Knockout js值没有绑定

时间:2014-01-29 11:33:29

标签: javascript mvvm knockout.js knockout-2.0 knockout-mvc

我的代码如下:

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"} ] } }

我的问题是,在更改选择控件时,值没有绑定。

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实例化它们。

nemesv和Neil Thomspson的观察结果也适用;您不应该在绑定中展开valuedatalist需要成为您虚拟机的属性。

答案 2 :(得分:0)

您的个人资料JSON无效。

你有

{
    "dat"{
        "data"[
            {
                "Value": "1"
            },
            {
                "Value": "2"
            },
            {
                "Value": "3"
            }
        ]
    }
}

它应该是:

{
    "dat": {
        "data": [
            {
                "Value": "1"
            },
            {
                "Value": "2"
            },
            {
                "Value": "3"
            }
        ]
    }
}
在这些情况下,

JsonLint.com是一个有用的工具