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);
});