我如何枚举一个javascript对象的属性使用数据绑定Knockout.js
How do I enumerate the properties of a javascript object using data-bind Knockout.js
我有下一个模型:
var simpleModel = function(){
var self = this;
self.name = "Simple model";
self.attributes = {
attr1: ko.observable("1"),
attr2: ko.observable("2"),
attr3: ko.observable("3")
};
}
我希望能够枚举这个模型的attributes
属性,并像这样显示键和值:
<div>
<span>attr1</span><span>1</span>
<span>attr2</span><span>2</span>
<span>attr3</span><spam>3</span>
</div>
我试图解决这个基于javascript的循环行为,当它被用于一个对象,但失败了:
<div data-bind="foreach: { data: designAttributes, as: 'dAttr' }">
<span data-bind="text: $index"></span>
<span data-bind="text: dAttr[$index]"></span>
</div>
恐怕foreach是为数组创建的,所以你需要函数将你的对象转换为数组。jsFiddle
window.objToArray = function (obj) {
var result = [];
for (var i in obj) {
result.push({ key: i, value: obj[i]});
}
return result;
};
并在绑定中使用它们:
<ul data-bind="foreach: window.objToArray(items)">
自定义绑定:
<div data-bind="createSpan">
ko.bindingHandlers.createSpan =
{
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
for(var item in valueAccessor())
{
$(element).append('<span data-bind="text:' + valueAccessor()[item] + '"></span>');
});
}
};
使用computed observable来获取你想要的结构并绑定到它。我擅自修改了你的JS并制作了self。
给你。
http://jsfiddle.net/sujesharukil/A846H/var simpleModel = function(){
var name = 'Simple model',
attributes = ko.observable({
attr1: ko.observable('1'),
attr2: ko.observable('2'),
attr3: ko.observable('3')
}),
splitAttributes = ko.computed(function(){
var splitAttribs = [];
for(var attr in attributes()){
splitAttribs.push({
name: attr,
val: attributes()[attr]
});
}
return splitAttribs;
}),
vm = function(){};
vm.name = name;
vm.attributes = splitAttributes;
return vm;
}
ko.applyBindings(new simpleModel());
这是它的HTML绑定。
<div data-bind="foreach: attributes">
<span data-bind="text: name"></span> = <span data-bind="text: val"></span> <br/>
</div>
希望这是你正在寻找的。
干杯!Suj
相关文章:
- 基本D3.js:如何将具有其他属性的数据绑定到元素
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- JavaScript HTMLElement 属性上的数据绑定 在 Polymer 中
- 聚合物 - 在重复模板中获取数据绑定属性值
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- 如何使用Plates模板引擎将数据绑定到对象数组内的属性
- Angular2-类属性上的双向数据绑定
- 数据绑定禁用属性在 foreach 内的按钮中不起作用
- AngularJS 2 - 内部属性数据绑定 - 异常:类型错误:无法读取未定义的属性
- 将数据绑定到基于对象属性的现有元素数
- Angular2 - 组件变量/组件类属性上的双向数据绑定
- 从数据绑定属性迭代键值对
- 如何在一个元素上具有多个数据绑定属性
- 为什么对象上的“.show”属性会搞砸基于该对象的数据绑定
- 如何在运行时创建不带数据属性的挖空数据绑定
- HTML 元素的 “dir” 属性 (rtl/ltr) 的数据绑定
- 如何将视图数据绑定到模型属性
- “数据绑定”是否是一个严格的仅淘汰属性
- 挖空添加我自己的数据绑定属性,如 With
- 聚合物,在构造函数中使用属性数据绑定