如何在Knockout中选择性地绑定属性
How to selectively bind attributes in Knockout
我希望根据模型''对象状态设置不同的数据主题属性。这里我只是为数据主题属性(jQueryMobile)设置"b"或"d"。我可以使用它:
<!-- ko if: $data.id() == $parent.selectedMatchId() -->
<li data-bind="text: $data.date" data-theme="b"></li>
<!-- /ko -->
<!-- ko ifnot: $data.id() == $parent.selectedMatchId() -->
<li data-bind="text: $data.date" data-theme="d"></li>
<!-- /ko -->
这有点难看。我想(希望)我能在属性绑定器中使用一个表达式,但Knockout绑定引擎不喜欢我给它的
<li data-bind="text: $data.date,
attr: {'data-theme' : $data.id() == $parent.selectedMatchId() : 'd' ? 'b'}"></li>
有没有比我使用的"ko if"answers"ko if not"更干净的方法?
您可以使用模板绑定。使用此绑定,您可以动态选择要使用的模板。
文件如下:http://knockoutjs.com/documentation/template-binding.html#note_4_dynamically_choosing_which_template_is_used
我更喜欢使用一个自定义绑定来更改我的jquery移动主题。例如,根据真实或错误的可观察值更改按钮的主题,以指示按钮是否被选中:
自定义绑定:
ko.bindingHandlers.jqmButtonTheme = {
init: function (element, valueAccessor)
{
var value = valueAccessor();
ko.utils.unwrapObservable(value) ? $(element).buttonMarkup({ theme: 'b' }) : $(element).buttonMarkup({ theme: 'a' });
},
update: function (element, valueAccessor)
{
var value = valueAccessor();
ko.utils.unwrapObservable(value) ? $(element).buttonMarkup({ theme: 'b' }) : $(element).buttonMarkup({ theme: 'a' });
}
};
JSFiddle示例:
http://jsfiddle.net/RVLqJ/10/
相关文章:
- Ember.js/HHandlebars:使用{{view}}助手渲染的视图不绑定属性
- 聚合物 - 在重复模板中获取数据绑定属性值
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- AngularJS1.2 Directive双向绑定属性未反映到View
- 为什么AngularJS在页面加载时没有自动绑定属性?包括一个非常简单的例子
- 如何在AngularJS指令中绑定属性
- 更改铁列表中现有项的绑定属性的值
- 如何使用 angularjs 中的表达式绑定属性名称
- Angular 指令内部 HTML 重新编译,动态创建绑定属性
- 标识事件中的绑定属性
- AngularJS 指令未正确绑定属性
- 在显示绑定属性之前在 JavaScript 中格式化绑定属性
- 从数据绑定属性迭代键值对
- 剑道绑定属性与字符串和变量
- 如何在一个元素上具有多个数据绑定属性
- 无法识别余烬组件 - 绑定属性渗入控制器
- 挖空添加我自己的数据绑定属性,如 With
- Emberjs如何绑定属性和id
- Ember绑定属性没有更新,尽管控制器属性更新得很好
- 如何在Knockout中选择性地绑定属性