Knockout.js 敲除-对象和视图的数组,对吗?
我有一个对象数组,其中每个对象表示视图的数据。我想为每个对象初始化一组属性,以便可以轻松地从一个函数添加到对象上。我这样做是这样的Knockout.js 敲除-对象和视图的数组,对吗?,knockout.js,Knockout.js,我有一个对象数组,其中每个对象表示视图的数据。我想为每个对象初始化一组属性,以便可以轻松地从一个函数添加到对象上。我这样做是这样的 var createViewProperties = function () { return { rightContentVisibility: ko.observable(true) // normally false, true for testing }; }; var data= [
var createViewProperties = function () {
return {
rightContentVisibility: ko.observable(true) // normally false, true for testing
};
};
var data= [
{
headline: "Are you interested in helping others?",
viewProperties: new createViewProperties(),
},
{
headline: "This is a second modal view",
viewProperties: new createViewProperties(),
}
];
然后找到要显示的适当对象并更新视图模型的对象。在HTML中,我这样绘制视图
<div data-bind="with: currentView">
<div data-bind="css: $data.headline" class="cover-img"></div>
<div data-bind="$data.viewProperties.rightContentVisibility"></div>
</div>
但是浏览器的.rightContentVisibility未定义,我是否没有正确实例化这些对象?当我在对象上暂停调试器时,它似乎拥有整个observable.viewProperties,但一旦它进入dom,它就不知道它是什么,这里出了什么问题 如果这样做,那么代码应该可以正常工作,不会出现任何错误。检查您的
ko.applyBindings()
调用-可能您在那里有错误
var createViewProperties=函数(){
返回{
rightContentVisibility:ko.observable(true)//通常为false,测试为true
};
};
风险值数据=[
{
标题:“你有兴趣帮助别人吗?”,
viewProperties:新建createViewProperties(),
},
{
标题:“这是第二种模式视图”,
viewProperties:新建createViewProperties(),
}
];
应用绑定({currentView:data})代码>
如果您这样做,那么代码应该可以正常工作,不会出现任何错误。检查您的ko.applyBindings()
调用-可能您在那里有错误
var createViewProperties=函数(){
返回{
rightContentVisibility:ko.observable(true)//通常为false,测试为true
};
};
风险值数据=[
{
标题:“你有兴趣帮助别人吗?”,
viewProperties:新建createViewProperties(),
},
{
标题:“这是第二种模式视图”,
viewProperties:新建createViewProperties(),
}
];
应用绑定({currentView:data})代码>
您的代码不起作用的原因是,您正在使用new
关键字调用createViewProperties
。在JavaScript中的方法调用之前使用new
,将this
的上下文设置为当前函数,并从该函数隐式返回this
。从对createViewProperties
的调用中删除new
,一切都应该正常
var data = [
{
headline: "Are you interested in helping others?",
viewProperties: createViewProperties(),
},
{
headline: "This is a second modal view",
viewProperties: createViewProperties(),
}
];
编辑
或者,您可以像这样使用new
:
var createViewProperties = function () {
this.rightContentVisibility = ko.observable(true);
};
然后按照你一直以来的方式重新开始。注意,惯例是在JavaScript中使用大写字符作为方法名,方法名用new
关键字调用。“构造函数”方法的名称在面向对象语言中通常也是一个名词。所以更好的办法是
var ViewProperties = function() { /* etc etc */ };
也就是说,像现在这样返回匿名对象没有什么错。您的代码不起作用的原因是您正在使用new
关键字调用createViewProperties
。在JavaScript中的方法调用之前使用new
,将this
的上下文设置为当前函数,并从该函数隐式返回this
。从对createViewProperties
的调用中删除new
,一切都应该正常
var data = [
{
headline: "Are you interested in helping others?",
viewProperties: createViewProperties(),
},
{
headline: "This is a second modal view",
viewProperties: createViewProperties(),
}
];
编辑
或者,您可以像这样使用new
:
var createViewProperties = function () {
this.rightContentVisibility = ko.observable(true);
};
然后按照你一直以来的方式重新开始。注意,惯例是在JavaScript中使用大写字符作为方法名,方法名用new
关键字调用。“构造函数”方法的名称在面向对象语言中通常也是一个名词。所以更好的办法是
var ViewProperties = function() { /* etc etc */ };
也就是说,像您现在这样返回匿名对象没有什么错