Javascript 剔除未绑定的js值
我的代码如下: Html: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
<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
应该可以解决此问题。