我有困难的时候结合使用的“关联数组”与剑道UI的MVVM视图模型。 我已经尝试合并演示在一起,但是真的很难,当我没有连半工作的一个走下车的。 但是,这是我已经成功的最好...这里是我的代码,用jsBin证明一起。 它只是似乎并不像一个关联数组的想法,我真的不特定怎么回事挂接到它。
究其原因,关联数组是因为我拉了很多的细节出来的数据库,但他们将需要通过名称某些地方被调用。 而不是写一堆搜索/分选方法的,关联数组是用于这个简单得多。 但在一些地方,我只是需要列出数据,顾左右而言他,这是给我带来很大的麻烦。
jsBin演示
使用Javascript
var viewModel = new kendo.data.ObservableObject({
Id: "test/id",
Associative: new kendo.data.ObservableArray([])
});
var array = viewModel.get("Associative");
array["One"] = { Id: "id/one" };
array["Two"] = { Id: "id/two" };
array["Three"] = { Id: "id/three" };
kendo.bind('body', viewModel);
HTML
<div data-bind="text: Id"></div>
<div data-template="display-associative-many" data-bind="source: Associative"></div>
<script type="text/x-kendo-template" id="display-associaite-many">
<div>
${ data.Id }
</div>
</script>
更新
我需要绑定到被存储在数据RavenDB
作为IDictionary<string, T>
其中T
是特定种类的对象的(它种变化在时间,所以不能给你一个具体类型-也不是真正相关)
因此,它被保存在如数据库...
"Model" : {
"ONE" : {
"Id" : "id/one"
},
"TWO" : {
"Id" : "id/two"
},
"THREE" : {
"Id" : "id/three"
}
}
显然,还有比这更多的数据,但是这一切是目前真正意义。
虽然我必须改变这种物理能力,这是违背程序的其他许多地方。 很多在这是一本字典的前提下,已经在软件工作各个地方的。 所以我想 ,以避免可能的话改变了这一切。 如果这是真的,真正使这项工作在所有的唯一途径,我会做出改变。
有什么我可以做,虽然是做一些映射,当它进行反序列化。 我想现在是分配key
到一个新的属性, Name
,并尝试剑道都绑定到。 因此,数据可能会,如果我的精神形象是正确的?
Associative: [
"One" : {
Name: "One",
Id: "id/one"
},
"Two" : {
Name: "Two",
Id: "id/two"
},
"Three" : {
Name: "Three",
Id: "id/three"
}
]
如果我没有理解剑道的observable
系统的权利,这将使它...
kendo.data.ObservableArray([
kendo.data.ObservableObject,
kendo.data.ObservableObject,
kendo.data.ObservableObject
])
当我抓住它,这应该是可以对模型绑定...对不对?
更新2
按照我自己的想法,我已经做了一定程度的成功版本的工作,这种方法......不过,我不能完全肯定这是否是安全的或有效的。 我越来越多关注的性能。 我还在试图寻找其他方式来实现这一结果。
剑道模板
<script type="text/x-kendo-template" id="display-items-many">
# for(var key in data) { #
# if (data.hasOwnProperty(key) && data[key].hasOwnProperty("Id")) { #
<tr>
<td>
<strong>#= data[key].Id #</strong>
</td>
<td class="text-right">
<code>#= data[key].Total #</code>
</td>
</tr>
# } #
# } #
</script>
HTML
<table class="table borderless table-hover table-condensed" data-bind="source: Associative data-template="display-items-many">
</table>