Javascript 剔除未绑定的js值

Javascript 剔除未绑定的js值,javascript,mvvm,knockout.js,knockout-2.0,knockout-mvc,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> $(function() { clientviewmodel = viewmodel(); ko.applyBindings(clientviewmo

我的代码如下:

Html:

<select 
    name="data3"
    size="1" 
    id="data3"
    data-bind="options: datalist, value: profile().dat.data()[2].Value()">
</select>
$(function()
{
    clientviewmodel = viewmodel();
    ko.applyBindings(clientviewmodel);
});

function viewmodel()
{
    var self = this;
    self.profile = ko.observable(ko.mapping.fromJS($.parseJSON(datareceived)));
}
{ "dat": {"data": [{"Value":"1"}, {"Value":"2"}, {"Value":"3"} ] } }
Json:

<select 
    name="data3"
    size="1" 
    id="data3"
    data-bind="options: datalist, value: profile().dat.data()[2].Value()">
</select>
$(function()
{
    clientviewmodel = viewmodel();
    ko.applyBindings(clientviewmodel);
});

function viewmodel()
{
    var self = this;
    self.profile = ko.observable(ko.mapping.fromJS($.parseJSON(datareceived)));
}
{ "dat": {"data": [{"Value":"1"}, {"Value":"2"}, {"Value":"3"} ] } }

我的问题是,更改select控件时未绑定值。您的配置文件JSON无效

你有

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

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

在这些情况下是一个有用的工具

在绑定的末尾有一组额外的
()

正确的绑定应该如下所示:

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

演示


编写
Value()
时,您并没有绑定到可观察属性本身,而是绑定到它的基础值,这使您的绑定是单向的。

因为您编写了
viewmodel()
作为“经典”构造函数,但没有使用
new
实例化它,实际上,您正在将
profile
设置为一个全局变量,并且在调用它时不返回任何内容,因此实际上没有将绑定应用到您的VM

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


nemesv和Neil Thomspson的观察结果也适用;您不应该在绑定中展开
value
,并且
datalist
需要是VM的一个属性。

这是您正在使用的正确json字符串吗?在浏览器javascript控制台中是否有任何错误?@Tim B James抱歉,像这样,{“dat”:{“data”:[{“value”:“1”},{“value”:“2”},{“value”:“3”}@nemesv我在控制台中没有收到任何错误。@Dani用正确的Json更新您的问题:)我的问题是这样的,{“dat”:{“data”:[{“Value”:“1”},{“Value”:“2”},{“Value”:“3”}}}值未绑定yetdatalist未在任何地方定义?然后请尝试在JSFIDLE中重新编译,您可以从链接的那个开始。因为如果在控制台写入
profile().dat.data()[2]时没有任何错误,那么Value
应该可以解决此问题。