首页 文章

Knockout js值没有绑定

提问于
浏览
1

我的代码如下:

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

My problem is, value is not binded on changing the select control.

3 回答

  • 1

    在绑定结束时,您还有一组额外的 () .

    正确的绑定应如下所示:

    <select 
        name="data3"
        size="1" 
        id="data3"
        data-bind="options: datalist, value: profile().dat.data()[2].Value">
    </select>
    

    演示JSFiddle .

    编写 Value() 时,您不会绑定到您的可观察属性本身,而是绑定到它的单向绑定的基础值 .

  • 2

    因为您已将 viewmodel() 编写为"classical"构造函数但未使用 new 进行实例化,所以实际上将 profile 设置为全局变量并且在调用它时不返回任何内容,因此实际上并未将绑定应用于VM .

    标准JavaScript实践是经典构造函数的名称,只有那些名称,应该以大写字母开头,以提醒您需要使用 new 实例化它们 .

    nemesv 's and Neil Thomspson'的意见也适用;您不应该在绑定中展开 value ,并且 datalist 需要是您的VM的属性 .

  • 0

    您的 Profiles JSON无效 .

    你有

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

    它应该是:

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

    在这些情况下,JsonLint.com是一个有用的工具

相关问题