【问题标题】:Knockout observable array not working as expected淘汰赛可观察阵列未按预期工作
【发布时间】:2012-06-27 17:43:40
【问题描述】:

我是 Knockout.js 的新手, 我创建了一个可观察数组并用一些数据进行了初始化。我期待任何时候 UI 发生变化(复选框或文本值),模型也应该得到更新。

我也订阅了数组。但我的回调方法永远不会被调用。

var viewModel = {
    seats:ko.observableArray( [
        { "No": "1", "Booked": "" }, ...
    ] )
};

viewModel.seats.subscribe(
    function(newvalue){
        alert(newvalue);
    }
);

ko.applyBindings( viewModel);

http://jsfiddle.net/2NMJX/

【问题讨论】:

    标签: knockout.js knockout-2.0


    【解决方案1】:

    您刚刚创建了一个可观察数组 - 这意味着,只要数组更新(添加或删除元素,例如:http://jsfiddle.net/2NMJX/1/),您就会收到通知,但不会在元素本身更新时收到通知。为此,您需要将值封装在可观察对象中:

    seats: ko.observableArray( [
        { "No": ko.observable("1"), ...
    

    然后,您就可以订阅这些 observables:

    viewModel.seats()[0].No.subscribe( ...
    

    http://jsfiddle.net/2NMJX/2/(尝试编辑“1”)

    【讨论】:

    • 感谢您的澄清。基本上,每当复选框状态发生更改时,我都希望收到关于座位号的通知。
    • 一个简单的方法是使用一个构造函数,它就像一个类,而不是普通的对象:jsfiddle.net/2NMJX/3
    • 哇.. 太棒了!!谢谢尼科。
    • 绝妙的答案。谢谢你。
    猜你喜欢
    • 2014-11-05
    • 2012-09-08
    • 2012-07-07
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多