Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.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 如何绑定嵌套在对象中的ko.obersavableArray_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript 如何绑定嵌套在对象中的ko.obersavableArray

Javascript 如何绑定嵌套在对象中的ko.obersavableArray,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有我的淘汰页面中心,我需要一个嵌套在ko.obeservableArray对象中的ko.obeservable对象,这是我定义它们的地方: function IncomeDeclarationHub() { //data comes from a ajax call. self.myIncomeDeclarationViewModel = ko.observable(new IncomeDeclarationViewModel(data)); } function I

我有我的淘汰页面中心,我需要一个嵌套在
ko.obeservableArray
对象中的
ko.obeservable
对象,这是我定义它们的地方:

 function IncomeDeclarationHub() {
    //data comes from a ajax call. 
    self.myIncomeDeclarationViewModel = ko.observable(new IncomeDeclarationViewModel(data));
 }

 function IncomeDeclarationViewModel(data) {
    var self = this;
    self.retentionAmount = ko.observable();
    self.taxableMonth = ko.observable();
    self.incDecDetGroViewModels = ko.observableArray();
    if (data != null) {
        var arrayLenght = data.IncDecDetGroViewModels.length;
        for (var i = 0; i < arrayLenght; i++) {
            var myObject = new IncomeDecDetGroViewModel(data.IncDecDetGroViewModels[i]);
            self.incDecDetGroViewModels.push(myObject);
        }
    }
 }
函数IncomeDeclarationHub(){
//数据来自ajax调用。
self.myIncomeDeclarationViewModel=ko.可观察(新的IncomeDeclarationViewModel(数据));
}
函数IncomeDeclarationViewModel(数据){
var self=这个;
自我保留金额=可观察的ko();
self.taxablemount=ko.observable();
self.incdecdegroviewmodels=ko.observearray();
如果(数据!=null){
var arrayLenght=data.incdecdegroviewmodels.length;
对于(变量i=0;i
这是我的HTML代码:

  <span class="label">
       Retention Amount
  </span>
  <input data-bind="value: myIncomeDeclarationViewModel.retentionAmount" />
  <table>
      <tbody data-bind="foreach: myIncomeDeclarationViewModel.incDecDetGroViewModels">
          ...
      </tbody>
   </table>

保留金额
...

好的,问题是,
incdecdegroviewmodels
从不填充,我以前在对象外部有
ko.obersableArray
,它工作得很好,现在我将它插入到我的对象
myIncomeDeclarationViewModel
并没有填充html表。我是否需要在
数据绑定中以不同的方式调用它?以前,您可以访问它,因为它在范围内,但现在您进行了一些嵌套,所以您只需要在视图部分进行一些循环即可

类似的内容可能是:

<table data-bind="foreach:myIncomeDeclarationViewModel">
      <tbody data-bind="foreach:$data.incDecDetGroViewModels">
          ...
      </tbody>
   </table>

...
如果您正在寻找以下不同的内容,也可以使用无容器foreach:

<!-- ko foreach:myIncomeDeclarationViewModel -->
//your table code
<!--/ko-->

//您的表代码

我希望这能解决这个谜题。

myIncomeDeclarationViewModel
是一个可观察的模型,因此您必须将其展开才能访问其属性。添加括号将其展开(访问可观察对象的基本值),如下所示:

<span class="label">
   Retention Amount
</span>
<input data-bind="value: myIncomeDeclarationViewModel().retentionAmount" />
<table>
  <tbody data-bind="foreach: myIncomeDeclarationViewModel().incDecDetGroViewModels">
      ...
  </tbody>
 </table>

保留金额
...
下面是一个基于您的示例的工作JSFIDLE


我尝试了你提出的第一个解决方案,但仍然没有得到任何结果。@xdumainefiddle效果很好。如果仍然存在问题,请更新您的总代码。很难说有限的代码。您是否考虑过不让ViewModel本身可见?通常,您希望视图模型的各个属性是可观察的,不是视图模型本身,因为视图模型本身没有改变。@xDaevax以及如何从视图中访问属性?视图模型的属性仍然可以从视图中访问,而视图模型本身不可见,只要属性可见。这是我为了好玩而做的一些击倒游戏,我做了这类事情:老兄,我需要再检查一下JsFiddle,但它是404。ThanxsI认为JSFIDLE遇到了一些问题。我可能找不到了。@Guillelon它回来了。JSFIDLE受到了垃圾邮件发送者的攻击,他们阻止了最近的一系列小提琴,但我让他们恢复了那个小提琴。