Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm 是否可以在';单击';结合_Mvvm_Knockout.js - Fatal编程技术网

Mvvm 是否可以在';单击';结合

Mvvm 是否可以在';单击';结合,mvvm,knockout.js,Mvvm,Knockout.js,是否可以在“单击”绑定中设置可观察 其中,Toolbar BottomTabs\u selectedIndex是一个可观察的索引。尝试以下操作: <div data-bind="click: toolbarBottomTabs_selectedIndex.bind($data, 0)"> 这是可能的,但我认为这不是一个正确的选择: <div data-bind="click:toolbarBottomTabs_selectedIndex.bind($data, 0)"&g

是否可以在“单击”绑定中设置可观察

其中,Toolbar BottomTabs\u selectedIndex是一个可观察的索引。

尝试以下操作:

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

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

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

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

编写“click:function(){…}”不是最好的解决方案。我相信这将是一个更好的一点,即使它是几行代码

<div data-bind="click: resetIndex">....</div>
我同意这一点

MVVM的全部目的是将视图与视图逻辑解耦,以便可以对其进行测试、重用等

但是,以这种方式操作视图模型中包含的数据并不理想

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

或者只是添加一个在ViewModel上执行相同操作的函数!?;)绝对地我选择此方法是为了将特定于UI的逻辑分组到此处,然后对ViewModel进行离散调用。如果使用单击绑定,则在重新提交视图(删除、添加项目等)时,KO将确保其更新,这是正确的。因为我们不能确定还有什么可以操纵这个元素。通过使用jQuery的$.on()方法来处理单击,对于不引人注目的事件处理程序也可以实现同样的效果。我将更新我的样本。你开始重新发明KO车轮;)只需使用点击绑定和你的设置?我很震惊人们怎么回答这个问题而不告诉它的坏习惯,它的坏!糟糕,糟糕,糟糕。MVVM的全部目的是将视图与视图逻辑分离,以便可以对其进行测试、重用等。尽管javascript很粗糙,但除了明显的编码错误之外,我不会担心“错误做法”。这个答案在页面加载时调用该函数。使用
.bind
是正确的方法。@Cabloo,你错了,在页面加载时不会调用函数。但是,使用bind更为正确,这是错误的-数据绑定属性是在页面加载时计算的。当在页面加载时对
bind
函数求值时,它返回一个回调,该回调应该传递给click。您正在传递要作为回调传递的函数的计算版本。
<div data-bind="click: function() { toolbarBottomTabs_selectedIndex(0) }">
<div id="clickme">...</div>
$('#clickme').on('click', function(e) {
    ko.dataFor(this).toolbarBottomTabs_selectedIndex(0);
});