我正在尝试决定构建我的应用程序的最佳方法,而且我有点困惑。我希望我的基本结构是这样的:
banners (ko.observableArray)
- banner
- previewURLs (ko.observableArray)
我创建“横幅”的方式是将其定义为类似的类:
// define a "banner" class
function banner(inventory, name, advertiser, artType, artSize, previewURLs) {
return {
inventory : ko.observable(inventory),
name : ko.observable(name),
advertiser : ko.observable(advertiser),
artType : ko.observable(artType),
artSize : ko.observable(artSize),
previewURLs : ko.observableArray(previewURLs),
// track if our banner is selected
isSelected : ko.observable(false),
};
};
这是正确的方法吗?我不确定如何在横幅本身中“嵌套”“previewURLs”数组。我尝试过这样做,但似乎没有用。
然后在我的viewModel中:
var viewModel = {
selectAll: ko.observable(false),
banners : ko.observableArray([
new banner("network", "Banner #1", "Target and Friends", "3rd Party", "300x250"),
new banner("oo", "Banner #2", "IBM", "Flash", "720x90")
]),
previewURLs : ko.observableArray([
new previewURL("test site #1", "http://www.google.com"),
new previewURL("test site #2", "http://www.google.com")
]),
addBanner : function() {
this.banners.push(new banner("network", "Banner"));
}
};
总的来说,我只是对如何构建它感到困惑。我之前从未使用任何MVVM或MVC结构,所以这对我来说都是新的。
我的想法是,我可以通过做类似的事情来访问我的横幅previewURL
banners.banner.previewURL(1)
,但我可能会想到这一点。
我可以在新横幅的定义中定义一个新的previewURL吗?
答案 0 :(得分:3)
我认为你有正确的想法。在创建viewModel对象之前,无法访问viewModel.previewURLs。您可能希望将previewURL传递到横幅构造函数或将previewURL存储在先前定义的变量中,该变量可以在横幅构造函数中访问。
在此处传递previewURL的示例:http://jsfiddle.net/rniemeyer/bZhCk/