是否可以在'click'绑定中设置observable?

时间:2013-11-05 08:58:15

标签: mvvm knockout.js

是否可以在'click'绑定中设置observable?

<div data-bind="click:toolbarBottomTabs_selectedIndex(0)"&GT;

其中toolbarBottomTabs_selectedIndex是一个可观察的。

4 个答案:

答案 0 :(得分:7)

试试这个:

 <div data-bind="click: toolbarBottomTabs_selectedIndex.bind($data, 0)">

答案 1 :(得分:2)

编写“click:function(){...}”并不是最好的解决方案。我相信即使是更多的代码行,这也会好一些。

<div data-bind="click: resetIndex">....</div>
在viewmodel中定义:

function resetIndex(){
    toolbarBottomTabs_selectedIndex(0);
}

答案 2 :(得分:1)

有可能,但我不认为这是一个正确的选择:

<div data-bind="click:toolbarBottomTabs_selectedIndex.bind($data, 0)">

Bind允许调用具有特定值的函数(observable是一个函数)。 bind的第一个参数是this对象的值,第二个是函数的第一个参数。

答案 3 :(得分:0)

我同意Anders关于这个......

  

MVVM的重点是将视图与视图逻辑分离,以便对其进行测试,重用等。

以这种方式操纵视图模型中包含的数据将起作用,但这并不理想。

<div data-bind="click: function() { toolbarBottomTabs_selectedIndex(0) }">

Knockout提供了一种更简洁的方法来实现unobtrusive event handler

在你的例子中,你应该做这样的事情......

<div id="clickme">...</div>

...然后在您的javascript中包含以下内容

$('#clickme').on('click', function(e) {
    ko.dataFor(this).toolbarBottomTabs_selectedIndex(0);
});