Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在knockout.js中创建ObservalArray的动态数组_Javascript_Jquery_Knockout.js_Observable - Fatal编程技术网

Javascript 在knockout.js中创建ObservalArray的动态数组

Javascript 在knockout.js中创建ObservalArray的动态数组,javascript,jquery,knockout.js,observable,Javascript,Jquery,Knockout.js,Observable,在我的视图模型中,我有以下函数来建立一个可观察数组的动态数组,命名为item.array\u name字段。但是,我无法用文档对象填充数组。因此,我在每个数组的页面中多次重复使用相同的HTML界面。有人能指出我的错误方向吗,或者他们的方法更好吗 self.getDocument = function(){ //Reset arrays self.documents.removeAll(); //Dynamically build arr

在我的视图模型中,我有以下函数来建立一个可观察数组的动态数组,命名为item.array\u name字段。但是,我无法用文档对象填充数组。因此,我在每个数组的页面中多次重复使用相同的HTML界面。有人能指出我的错误方向吗,或者他们的方法更好吗

     self.getDocument = function(){
        //Reset arrays
        self.documents.removeAll();

        //Dynamically build arrays
        $.getJSON("/Documentation/Get-Section", function(allData) {
            $.map(allData, function(item) { 
                var obj = {};
                obj[item.array_name] = ko.observableArray([]);
                self.documents(obj)                   
            })

        });

        //Add document object to the arrays
        $.getJSON("/Documentation/Get-Document", function(allData)
            $.map(allData, function(item) { 
                var temp_array = 'self.documents.'+item.array_name
                eval(temp_array+'(new Document(item))')
            });
        });

    }

我会重新调整你的物品:

 self.getDocument = function(){
    //Reset arrays
    self.documents.removeAll();

    //Dynamically build arrays
    $.getJSON("/Documentation/Get-Section", function(allData) {
        $.map(allData, function(item) { 
            var section = { name: item.array_name, documents: ko.observableArray([])};
            self.documents.push(section);
        })

    });

    //Add document object to the arrays
    $.getJSON("/Documentation/Get-Document", function(allData){
        $.map(allData, function(item) { 
        var section = ko.utils.arrayFirst(self.documents(), function(documentSection) {
            return documentSection.name === item.array_name;
        });
            section.documents.push(new Document(item));
        });
    });
}

谢谢这非常有效,将数组名设置为对象中的值是一种更好的技术。谢谢你!正如一个补充的问题:你能解释一下我如何在knockout中循环使用这些部分来重用组成界面的HTML部分吗?在你的HTML中使用foreach:documents部分,这将用于每个部分。考虑到documents对象不是严格意义上的文档,将其重命名为documentSections或其他东西可能是个好主意。