Javascript 使用knockoutjs的模板绑定设计的模式

Javascript 使用knockoutjs的模板绑定设计的模式,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我们的情况如下所述: 搜索面板有一组数据,在多个页面中调用,包含不同类型的组件和位置。可以有组合框、单选按钮、输入框和按钮 Knockout有一个模板绑定的特性,在这个特性中,我们可以灵活地在映射到模型的html中使用模板来显示大量面板 以下是代码和模式: HTML: 上面的代码给了我一个错误: Ajax错误:parsererror错误:无法分析绑定。消息:ReferenceError:未定义templateName;绑定值:模板: {name:'label_'+templateName}cob

我们的情况如下所述:

搜索面板有一组数据,在多个页面中调用,包含不同类型的组件和位置。可以有组合框、单选按钮、输入框和按钮

Knockout有一个模板绑定的特性,在这个特性中,我们可以灵活地在映射到模型的html中使用模板来显示大量面板

以下是代码和模式:

HTML: 上面的代码给了我一个错误:

Ajax错误:parsererror错误:无法分析绑定。消息:ReferenceError:未定义templateName;绑定值:模板: {name:'label_'+templateName}cobalt.init.js:66


这不是对您的问题的直接回答,但它显示了使用ViewModel类型查找视图样板的另一种方法

每种类型的编辑器都是一个ViewModel

MyApp.Editors.BoolViewModel = function(data) {
    this.checked = data;
};
MyApp.Editors.BoolViewModel.can = function(data) {
    return typeof data === "boolean";
};
它有一个can函数,用于确定是否可以编辑该值

然后,我使用一个名为Knockout.BindingConventions的库来查找连接到ViewModel的模板

MyApp.Editors.BoolViewModel = function(data) {
    this.checked = data;
};
MyApp.Editors.BoolViewModel.can = function(data) {
    return typeof data === "boolean";
};
您的foreach绑定创建一个子绑定上下文,该上下文不包括templateName,因为它是父绑定的一部分。换成

<!-- ko template: { name: 'label_' + $parent.templateName()} -->

对不起,我不明白-你有什么问题?是因为Ajax或与新设计模式相关的东西导致了错误吗?您是如何绑定到页面的?似乎您的foreach:preSearchData没有使用对象“Models.POCModel”,这是您唯一定义了templateName的对象类型。
<!-- ko template: { name: 'label_' + $parent.templateName()} -->