0
我目前正在使用knockout.js作爲我正在開發的應用程序的一部分。我需要實現一個包含無序列表的knockout組件,其列表項根據組件參數的不同而不同。基於組件參數動態構建的挖空組件模板
用於登記部件將如下所示的基本代碼:
ko.components.register('data-display', {
viewModel: function(name, obj, vis) {
var self = this;
for (var index in obj) {
self[index] = obj[index];
}
},
template: //Template lives here
});
function templateConstructor(name, obj, vis) {
var template = '<h2>' + name + '</h2>\r\n';
template += '<ul>\r\n';
for (var index in obj) {
var kvInfo = getKVInfo(vis, index);
if (kvInfo) {
template += '<li><strong>' + kvInfo + '</strong><span data-bind="text: ' + index + '"></span></li>\r\n';
}
}
template += '</ul>\r\n';
return template;
}
function getKVInfo(vis, index) {
for(var key in vis) {
if (key == index) {
return vis[key];
}
}
return False;
}
和obj
值,name
& vis
將是以下形式:
var name = "Information"
var obj = {foo: ko.observable('bar'), bar: ko.observable('foo'), ta: ko.observable('da')}
var vis = {foo: 'Foo Info: ', bar: 'Bar Info: '}
的想法是,在組件會有一個包含名稱的頭文件,然後從obj中顯示的數據被vis從屏蔽。即:在上面的情況下,組件中只有foo
和bar
元素可見。 我試圖解決的問題是如何從HTML組件聲明採取PARAMS,並將它們傳遞給模板,以及視圖模型,這樣我可以使用HTML:
<data-display params="name: name, obj: obj, vis: vis"></data-display>
,並獲得該結果:
<h2>Information</h2>
<ul>
<li><strong>Foo Info: </strong><span data-bind="text: foo"></span></li>
<li><strong>Bar Info: </strong><span data-bind="text: bar"></span></li>
</ul>
工作就像一個絕對的魅力。感謝您的幫助。 – dbr