Arrays KnockoutJS:nesting ko.array

Arrays KnockoutJS:nesting ko.array,arrays,knockout.js,Arrays,Knockout.js,我正试图确定构建我的应用程序的最佳方式,但我有点困惑。我希望我的基本结构如下: banners (ko.observableArray) - banner - previewURLs (ko.observableArray) 我创建“横幅”的方法是将其定义为一个类,如下所示: // define a "banner" class function banner(inventory, name, advertiser, artType, artSize, previewUR

我正试图确定构建我的应用程序的最佳方式,但我有点困惑。我希望我的基本结构如下:

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结构,所以这对我来说都是新的

我的想法是,我可以通过以下方式访问我的横幅预览页面
banner.banner.previewURL(1)
,但我的想法可能有点偏离了


我可以在新横幅的定义中定义一个新的预览吗?

我想你的想法是对的。但是,在创建viewModel对象之前,无法访问viewModel.previewURLs。您可能希望将PreviewUrl传递到banner构造函数中,或者将PreviewUrl存储在可以在banner构造函数中访问的先前定义的变量中

此处传入预览的示例: