使用动态名称创建KnockoutJS observable

时间:2013-03-28 20:50:50

标签: javascript knockout.js

我正在为我的应用程序使用自己的简单模板系统,并且每页将加载未知数量的“相同”模板。

基本上,我通过ajax调用获取一些数据并获得uniqueId。然后我将模板加载到我的页面并使用uniqueId应用id和data-bind =“with:”。

<div id="content-uniqueId">
    <div data-bind="with: uniqueId">
        ...
    </div>
</div>

然后我调用一个函数,并尝试使用uniqueId创建一个observableArray,以便它绑定到我的'with'。

类似的东西:

function(uniqueId) {
     var theObservable = uniqueId;
     theObservable = ko.observableArray(); // make the observable name equal to uniqueId
     // get some data
     theObservable(new data);
}

我已经创建了一个JS小提琴,以帮助清理,但它不起作用,因为我没有获取ajax数据或传递唯一ID。

JS Fiddle here

修改

Updated JS Fiddle,根据Tyrsius的建议如下。

this[uniqueId] = ko.observableArray(new entityApp.dataContext.EntityModel(data));

肯定只有一步,但我收到了一个错误:

初始化可观察数组时传递的参数必须是数组,或null或未定义

但是'new entityApp.dataContext.EntityModel(data)'返回一个对象数组,所以应该没问题。

1 个答案:

答案 0 :(得分:2)

Javascript使用其对象索引器简化动态赋值和反射:

var ViewModel = function(propName) {
    this[propName] = ko.observable("reflection");
};

ko.applyBindings(new ViewModel("dynamic"));

以下a fiddle证明了绑定。