Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 applyBindings_Javascript_Knockout.js - Fatal编程技术网

Javascript 带有空数据模型的Knockout.js applyBindings

Javascript 带有空数据模型的Knockout.js applyBindings,javascript,knockout.js,Javascript,Knockout.js,当viewModel的数据模型未知时,是否可以应用绑定?我的问题是,数据模型结构是在页面上的ajax调用之后首先知道的,我对knockout.js的理解是,viewModel应该在页面加载时被初始化 代码失败,NCCustomerId未定义 我该怎么处理?我可以等待调用ko.applyBindings()直到我知道数据模型结构(我在ajax调用之后会这样做),但是在使用knockout.js时,这是正确的方法吗 function initModel () { var kunderModel =

当viewModel的数据模型未知时,是否可以应用绑定?我的问题是,数据模型结构是在页面上的ajax调用之后首先知道的,我对knockout.js的理解是,viewModel应该在页面加载时被初始化

代码失败,NCCustomerId未定义

我该怎么处理?我可以等待调用ko.applyBindings()直到我知道数据模型结构(我在ajax调用之后会这样做),但是在使用knockout.js时,这是正确的方法吗

function initModel () {
var kunderModel = function () {
    var self = this;
    self.list = ko.observableArray();
    self.selectedItem = ko.observable();
    self.newItem = ko.observable();  

    self.add = function () {
        self.selectedItem(newItem(self.newItem));
        showInputContainer();
    };

    self.getList = function () {
        var nButikId = jQuery("#butikid").val();
        jQuery.ajax({
            url: "crm_service.wso/Dan_Butik_Kunder_Tabel/JSON/",
            data: { nButikId: nButikId },
            success: function (data) {
                self.list(data);
            },
            complete: function () {
                connectExt.UIElements().Loading(false);
            }
        });
    }
}
}

    _viewModel = new kunderModel();
    ko.applyBindings(_viewModel);

    jQuery(document).ready(function () {
        initModel();
    });

<div data-bind="template: { name: 'editTmpl', data: selectedItem }"></div>

<script id="editTmpl" type="text/html">      
    <div  class="opretContainer">
        <div class="opretContainerTitle">
            <span data-bind="visible: nCustomerId == 0">New</span>
            <span data-bind="visible: nCustomerId != 0">Edit</span>
        </div>
    </div>
</script>
函数initModel(){
var kunderModel=函数(){
var self=这个;
self.list=ko.observearray();
self.selectedItem=ko.observable();
self.newItem=ko.observable();
self.add=函数(){
self.selectedItem(newItem(self.newItem));
showInputContainer();
};
self.getList=函数(){
var nButikId=jQuery(“#butitkid”).val();
jQuery.ajax({
url:“crm_service.wso/Dan_Butik_Kunder_Tabel/JSON/”,
数据:{nButikId:nButikId},
成功:功能(数据){
自我清单(数据);
},
完成:函数(){
connectExt.UIElements().Loading(false);
}
});
}
}
}
_viewModel=新的kunderModel();
ko.应用绑定(_viewModel);
jQuery(文档).ready(函数(){
initModel();
});
新的
编辑

您不需要初始化功能。您应该直接在JQuery文档回调中初始化\u viewModel

您必须了解ViewModel本身已经是一个函数。初始化viewmodel时,可以直接在viewmodel内部调用getList函数

我要做的是:

jQuery(document).ready(function () {
    _viewModel = new kunderModel();
    ko.applyBindings(_viewModel);    
});
而不是昆德模型内部:

var kunderModel = function () {
   var self = this;
   self.list = ko.observableArray();

   self.getList = function () {
       var nButikId = jQuery("#butikid").val();
       jQuery.ajax({ ... });
   };

   self.getList();
}

这样,在创建ViewModel结束时调用getList方法。(我认为它是一种由“构造函数”调用的方法。由于所有内容都是可观察的,因此在执行回调时,您的UI将自动更新。

在AJAX调用后执行即可。谢谢!还有助于进一步了解knockout.js的性质:)