Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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
Knockout.js knockoutjs-在foreach绑定中访问$parent/$root_Knockout.js_Knockout 2.0_Knockout 3.0 - Fatal编程技术网

Knockout.js knockoutjs-在foreach绑定中访问$parent/$root

Knockout.js knockoutjs-在foreach绑定中访问$parent/$root,knockout.js,knockout-2.0,knockout-3.0,Knockout.js,Knockout 2.0,Knockout 3.0,是我正在研究的一个plunker代码。我已经定义了一个如下所示的VM var employee = function(fname,lname){ var self= this; self.fname = ko.observable(fname); self.lname = ko.observable(lname); self.selectedElement = ko.observable('Default Value'); } var vm =

是我正在研究的一个plunker代码。我已经定义了一个如下所示的VM

    var employee = function(fname,lname){
    var self= this;
    self.fname = ko.observable(fname);
    self.lname = ko.observable(lname);
    self.selectedElement = ko.observable('Default Value');
  }

  var vm = function(){
      var self = this;
      self.employees = new ko.observableArray([]);
      self.selectedElement = ko.observable(-1);

      var e1 = new employee('f1','l1');
      var e2 = new employee('f2','l2');
      self.employees.push(e1);
      self.employees.push(e2);
  };

  ko.applyBindings(vm,container);
我显示员工列表的代码是

<body id="container">
<h1>Empoyees</h1>
<div>
  <div data-bind="foreach: employees">
    <h4 data-bind="text: 'Employee' + $index()"></h4>
    <span>First Name :</span>
    <span data-bind="text: fname"></span>
    <br/>

    <span>Last Name :</span>
    <span data-bind="text: fname"></span>
    <br/>

    <span data-bind="text: selectedElement()"></span>
    <!-- I want to access parents 'selectedElement' i.e. vm.slectedElement() -->
    <!--I tried below code but its causing binding error.-->
    <!-- <span data-bind="text: $parent.selectedElement()"></span> -->
    <br/>
  </div>
</div>

雇员
名字:

姓氏:

请注意,lass“
employee
”和主视图模型“
vm
”都具有相同的名为(
selectedElement
)的属性

现在在foreach绑定中,我试图访问根/父上下文的'
selectedElement
'属性,但因为我在foreach中,ko正在访问'employee'类的'selectedElement'属性

我尝试使用
$root
$parent
关键字来访问parent元素属性,但这会导致绑定错误


我遗漏了什么吗?又是plunker链接。

您从未创建根视图模型的实例。将初始调用更改为

ko.applyBindings(new vm(),container);


执行此操作时,
$root
$parent
将按预期工作。

您从未创建过根视图模型的实例。将初始调用更改为

ko.applyBindings(new vm(),container);


当您这样做时,
$root
$parent
将按预期工作。

感谢@Jamiec的快速响应。但是,我仍然不明白为什么其他所有东西(除了$root/$parent)都可以在没有实例化视图模型对象的情况下工作。可能是我不懂基本知识。你能解释一下吗?@user2243747 knockout将接受一个直线函数作为视图模型,但当你这样做时,这个可能指的是窗口对象。它会混淆运行时视图模型的层次结构,因此像
$root
$parent
这样的东西可能指向错误的位置。感谢@Jamiec的快速响应。但是,我仍然不明白为什么其他所有东西(除了$root/$parent)都可以在没有实例化视图模型对象的情况下工作。可能是我不懂基本知识。你能解释一下吗?@user2243747 knockout将接受一个直线函数作为视图模型,但当你这样做时,这个可能指的是窗口对象。它会混淆运行时视图模型的层次结构,因此像
$root
$parent
这样的东西可能指向错误的位置。