KnockoutJS:如何为jQuery获取foreach行选择器

时间:2012-03-15 19:25:46

标签: jquery knockout.js

我在这里很新,但这个网站已经给了我很多帮助,所以我希望你们能帮我解决一个问题。

我刚开始使用KnockoutJS进行编码,到目前为止我喜欢它,这对我来说是非常不同的编程方式,但我已经看到了它给我带来的好处。

但是,我遇到了一个小问题,这可能很简单,但我无法完成。

我删除了我的代码以查明此处的问题。

我有一个由KO中的foreach绑定生成的列表但是当我点击它时我想要一个jQuery事件发生,在这种情况下,例如我希望它用动画隐藏。

正如您在代码中看到的那样,我可以简单地在dom-ready函数中在脚本底部写一些行,并在ul中对al li元素进行硬编码,但由于我选择的事实(在其他原因)在KO中编写代码来整理大项目的代码我真的想编写jquery事件,当用户点击li来点击绑定时就会发生这种情况。

这是我的代码,为方便起见,我也做了一个小问题: http://jsfiddle.net/edleutscher/JTa5Y/

JS:

function AppViewModel() {
    var self = this;

    self.people = ko.observableArray([
        { name: 'Bert' },
        { name: 'Charles' },
        { name: 'Denise' }
    ]);

    self.clickAction = function(data) {
        $(data).hide();
    }
}

ko.applyBindings(new AppViewModel());​

HTML:

<ul data-bind="template: { name: 'rowTemplate', foreach: people }"></ul>

<script type="text/html" id="rowTemplate">
<li data-bind="click: function() { $root.clickAction($data) }">${name}</li>
</script>​

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要将事件传递给click函数,以便您可以访问被单击的元素。

http://jsfiddle.net/JTa5Y/1/

您的点击功能:

self.clickAction = function(data, event) {
    $(event.target).hide();
}

数据绑定语句

<script type="text/html" id="rowTemplate">
    <li data-bind="click: function(vm, event) { $root.clickAction($data, event) }">${name}</li>
</script>​