【问题标题】:knockoutjs click binding within foreach binding在 foreach 绑定中敲除js单击绑定
【发布时间】:2012-06-09 20:52:45
【问题描述】:

编辑:问题与绑定无关,而是与一个简单的 JavaScript 错误有关。

我有一个关于 foreach 绑定中的点击绑定的问题。 我有一个项目列表,其中显示一个下拉框以从主数据中选择一个值。可以从该列表中添加和删除项目。 删除项目的按钮嵌套在 foreach 绑定中。因此我希望我应该将它与 $parent>

绑定
<button data-bind="click: $parent.removeNumber">-</button>

那行不通。但以下版本有效:

<button data-bind="click: removeNumber">-</button>

我不明白为什么。

代码:

<h2>numbers:</h2>
 <ul data-bind="foreach: numbers">
     <li>
       <select data-bind="value: id, 
                          options: masterData, 
                          optionsText: 'caption', 
                          optionsValue: 'id'"></select>
        <br />
        value: <span data-bind="text: id"></span>
        <br />
        <button data-bind="click: $parent.removeNumber">-</button>      
    </li>
</ul>
<button data-bind="click: addNumber">+</button>

function ViewModel() {
    self.masterData = [{ id: 1, caption: "One"},
                       { id: 2, caption: "Two"}];

   self.numbers = ko.observableArray([{
        id: ko.observable(2)}]);

    self.addNumber = function() {
        self.numbers.push({
            id: ko.observable(2)
        });
    };


    self.removeNumber = function(item) {
        self.numbers.destroy(item);
        console.log("removed" + item);
    };
}

var viewModel = new ViewModel();
ko.applyBindings(viewModel);​

我创建了一个小提琴(不工作的版本): http://jsfiddle.net/delixfe/NWWH8/

感谢您的帮助。

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    你有我一秒钟!

    你是对的,$parent 应该是必需的。您的错误是没有在您的视图模型中定义self。之后,removeButton 和 masterData 绑定都需要 $parent

    这是一个有效的小提琴:http://jsfiddle.net/FpSWb/

    【讨论】:

      猜你喜欢
      • 2013-06-08
      • 2012-12-06
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多