【问题标题】:Knockout js values not bindedKnockout js 值未绑定
【发布时间】:2014-02-21 04:23:53
【问题描述】:

我的代码如下:

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

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

【问题讨论】:

  • 这是您使用的正确 json 字符串吗?
  • 你的浏览器javascript控制台有什么错误吗?
  • @Tim B James 抱歉,像这样,{ "dat": {"data": [{"Value":"1"}, {"Value":"2"}, {"值":"3"} ] } }
  • @nemesv 我在控制台中没有收到任何错误。
  • @Dani 用正确的 Json 更新您的问题 :)

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


【解决方案1】:

您的个人资料 JSON 无效。

你有

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

应该是:

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

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

【讨论】:

  • 我有这样的,{ "dat": {"data": [{"Value":"1"}, {"Value":"2"}, {"Value": "3"} ] } } 值尚未绑定
  • datalist 没有在任何地方定义?
【解决方案2】:

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

正确的绑定应该是这样的:

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

演示JSFiddle.

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

【讨论】:

  • 然后请尝试在 jsfiddle 中重现此内容,您可以从已链接的内容开始。因为如果你在控制台写profile().dat.data()[2].Value没有任何错误应该可以解决这个问题。
【解决方案3】:

因为您已经将viewmodel() 编写为“经典”构造函数,但您没有使用new 对其进行实例化,所以您实际上将profile 设置为全局变量,并且在调用它时不返回任何内容因此实际上并未将绑定应用到您的虚拟机。

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

nemesv 和 Neil Thomspson 的观察也适用;您不应该在绑定中解开 value,并且 datalist 需要成为您 VM 的属性。

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2015-04-05
    • 2016-12-08
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多