Javascript 创建具有动态名称的KnockoutJS observable

Javascript 创建具有动态名称的KnockoutJS observable,javascript,knockout.js,Javascript,Knockout.js,我正在为我的应用程序使用我自己的简单模板系统,每页将加载未知数量的“相同”模板 所以基本上,我通过ajax调用获取一些数据并获得一个唯一ID。然后,我将一个模板加载到我的页面中,并使用uniqueId应用id和data bind=“with:” <div id="content-uniqueId"> <div data-bind="with: uniqueId"> ... </div> </div> 我创建了一个J

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

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

<div id="content-uniqueId">
    <div data-bind="with: uniqueId">
        ...
    </div>
</div>
我创建了一个JS提琴来帮助清理问题,但它不起作用,因为我没有获得ajax数据或传递唯一id

编辑:

,根据Tyrsius在下面的建议

this[uniqueId] = ko.observableArray(new entityApp.dataContext.EntityModel(data));
肯定是一步之遥,但我得到了一个错误:

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


但是“new entityApp.dataContext.EntityModel(data)”返回一个对象数组,因此应该可以使用。

Javascript通过其对象索引器简化了动态赋值和反射:

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

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

这是绑定的演示。

谢谢,我现在离绑定又近了一步。但是我仍然得到了一个错误(见我上面的编辑)。更新了你的JS小提琴,使它更符合我的情况。我不明白为什么它不起作用,但我可能还在做一些愚蠢的事情。您的问题是数组是一个对象,而不是数组。你是想要阵列名称,还是想要可观测阵列([阵列])?嗯,我不知道。当我没有使用这些动态uniqueid时,使用这些数据可以很好地执行var obs=ko.observearray();然后是obs(newentityapp.dataContext.EntityModel(data));我不知道。我感谢你的帮助。我可能不得不重新思考我的方法。在构建过程中,它会抛出一个错误;如果您试图在构造后将对象传递给observableArray,则会将其转换为非数组observable。除非您的数据发生了更改,否则您所描述的内容将无法工作。看一看:。注意htmlRight。打得好-这很有帮助。当我切换到动态ID时,我一定把别的事情弄糟了。我不会回去,让它在没有动态ID的情况下工作,并将重新开始,记住这一点。我真的不确定我做错了什么,但我会找到答案的。我还没有找到答案,但我会把你的帖子标记为正确答案,因为它帮了我很大的忙。谢谢你看!
var ViewModel = function(propName) {
    this[propName] = ko.observable("reflection");
};

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