Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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 Knockoutjs vm未绑定到正确的元素_Javascript_Knockout.js_Observable - Fatal编程技术网

Javascript Knockoutjs vm未绑定到正确的元素

Javascript Knockoutjs vm未绑定到正确的元素,javascript,knockout.js,observable,Javascript,Knockout.js,Observable,我有两个模型 1. vm1 (for page1.php) 2. vm2 (for page2.php) 它们在单独的js文件中。vm1的绑定方式如下: VM1.js $(function() { //other stuff // see orders is defined here gs.vm1 = function(){ var orders = ko.observableArray([]); }(); ko.appl

我有两个模型

1. vm1 (for page1.php)
2. vm2 (for page2.php)
它们在单独的js文件中。vm1的绑定方式如下: VM1.js

$(function() {
    //other stuff
    // see orders is defined here
    gs.vm1 = function(){
            var orders = ko.observableArray([]);
        }();
    ko.applyBindings(gs.vm1, document.getElementById('page1_id'));
);
vm2绑定到如下对话框: VM2.JS

$(function(){
    //other stuff
    // orders is NOT defined here
    gs.vm2 = function(){...}();
    ko.applyBindings(gs.vm2, document.getElementById('page2_id'));
});
正如您所看到的,我在与kojs站点上提到的特定元素的绑定中是显式的:

当我加载page1.php,其中vm1应该是有界的,我得到以下错误:

Uncaught ReferenceError: Unable to process binding "foreach: function(){return orders }"
Message: orders is not defined
这是page1.php中的模板代码,我在其中使用foreach:

<div id="page1_id">
    <div data-bind="foreach: orders">
        <input class="form-check-input" type="checkbox">
        <span data-bind="text: ...some observable..."></span>
    </div>
</div>

我正在使用一个模块显示模式,该模式显示我想要公开的变量,订单就是其中之一。

我发现了问题,并将发布答案,以防有人犯与我相同的错误。 正如我在问题中所说,vm1代表一个对话框,给该对话框的id是page1_id。我在page2上没有该对话框,当ko应用绑定时,它找不到该id,并且会将null传递给

ko.applyBindings = function (viewModelOrBindingContext, rootNode) {...}
作为第二个参数。 如果查看ko代码,则节点的设置方式如下:

rootNode = rootNode || window.document.body;
因此,如果您传递null,那么主体基本上就是您的上下文,因为没有在那里定义顺序,所以会出现错误


因此,我想教训是(至少对我来说)确保绑定中的显式定义是否正确地定义在所需页面上。

@Ray,为什么会这样?在我的虚拟机中,这将是窗口上下文。您能否尝试从
vm1
viewmodel的定义中删除最后两个括号
()
?@YuriyN.,这将做什么?这将把立即调用的函数表达式转换为简单函数,适合作为Knockout的viewmodel。
rootNode = rootNode || window.document.body;