如何使用KnockoutJS在foreach循环中指定不同的点击绑定
How to specify different click bindings in a foreach loop with KnockoutJS
我有一个knockout可观察数组,其形式为:
this.controls = ko.observableArray([
{
name: 'Previous',
action: '$root.previous'
},
{
name: 'Next' ,
action: '$root.next'
},
{
name: 'Save',
action: '$root.save'
}
]);
我想做以下几点:
<div class="controls navigation">
<ul data-bind="foreach: $root.controls">
<li>
<span data-bind="text: name, click: action"></span>
</li>
</ul>
</div>
视图创建三个独立的span,它们本质上是按钮。我的目标是,当用户每次单击特定的span时,在视图模型中调用相应的操作。
但是,这行不通。
如何循环遍历数组并为每个项指定不同的单击绑定动作?
我可以很容易地单独写出每个span(在这个特定的例子中,因为数组中只有3个项目),但是我很好奇如何使用数组来完成这一点。
你很接近了。假设您已经像这样定义了previous、next和save
this.previous = function() { ... };
假设你这样定义self
self = this;
那么你所要做的就是像这样更新你的数组:
this.controls = ko.observableArray([
{
name: 'Previous',
action: self.previous
},
{
name: 'Next',
action: self.next
},
{
name: 'Save',
action: self.save
}
]);
请注意action不再是一个字符串,而是一个函数的引用。
http://jsfiddle.net/tlarson/Dwwft/也许你可以这样重构
this.controls = ko.observableArray([
{
name: 'Previous'
},
{
name: 'Next'
},
{
name: 'Save'
}
]);
this.myAction = function (value, event) {
if(value == 'Previous')
{
// do stuff
}
else if(value == 'Next')
{
// do stuff
}
else if(value == 'Save')
{
// do stuff
}
return true;
}
然后<div class="controls navigation">
<ul data-bind="foreach: $root.controls">
<li>
<span data-bind="text: name, click: myAction"></span>
</li>
</ul>
</div>
相关文章:
- 使用KnockoutJS绑定的YUI DataTable
- Knockoutjs-我无法使字段绑定
- KnockoutJS绑定每个文档不止一次
- 未绑定到使用 KnockoutJS 的表的数据
- KnockoutJS删除动态绑定
- 用于动态引导工具提示的自定义KnockoutJS绑定处理程序
- 将tinyMCE与knockoutjs绑定
- KnockoutJS在绑定完成后触发回调
- knockoutjs:值绑定互斥或点击事件
- POST KnockoutJS数据到mvc控制器没有绑定
- 如何使用knockoutjs绑定嵌套输入
- AngularJS数据绑定与KnockoutJS数据绑定
- 如何绑定输入类型='电子邮件'在knockoutjs中
- knockoutjs上的绑定按键事件,可观察到未填充
- 更改可观察数组会更改自定义绑定处理程序knockoutjs的可见性
- 动态插入Div会破坏KnockoutJS数据绑定
- 使用knockoutjs绑定和显示字典
- KnockoutJS:无法处理绑定"if:function(){return conversations}”;
- KnockoutJS:渲染后应用绑定导致“;xxx未被定义”;
- AJAX调用后的Attr绑定(knockoutjs)