如何在ko.observableArray中更新从零开始的索引数组

时间:2016-02-22 09:57:11

标签: javascript arrays json knockout.js

我是淘汰赛的新程序员。 这是关于练习时ko.observableArray的问题。 我为初始数据提供了一个从零开始的索引数组,在单击按钮时将显示JSON。 但是当我尝试从输入字段更新任何值但是在单击按钮后我无法获得新的JSON。

我认为问题是我的数组中没有索引。点击后如何获取新的JSON?



function ViewModel(inputs){		
  this.inputs = ko.observableArray(inputs);
  
  this.getData = function(){						
    this.jsonData(ko.toJSON(this.inputs));
  };
  
  this.jsonData = ko.observable('');
};
	
	
var initialData =  [ 'Jan', 'Feb', 'Mar', 'etc' ];

var viewModel = new ViewModel(initialData);

ko.applyBindings(viewModel); 

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
<ul data-bind="foreach: inputs">
    <li>
        The current item is: <input type='text' data-bind="value: $data"></b>
    </li>
    
</ul>
<textarea rows='5' cols='60'  data-bind='value: jsonData'> </textarea>
<button data-bind='click: getData'>get Data</button>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

我认为因为$ index你无法获得这个更新的JSON

如果在“initialData”中添加键值对,您将获得更新的JSON数据

这里打击工作代码:

function ViewModel(inputs) {
    this.inputs = ko.observableArray(inputs);

    this.getData = function () {
        this.jsonData(ko.toJSON(this.inputs));
    };

    this.jsonData = ko.observable('');
};


var initialData = [{ name: 'Jan' }, { name: 'Feb' }, { name: 'Mar' }, { name: 'etc' }];

var viewModel = new ViewModel(initialData);

ko.applyBindings(viewModel);


<ul data-bind="foreach: inputs">
    <li>
        The current item is: <input type='text' data-bind="value: name"><br />
    </li>
</ul>
<textarea rows='5' cols='60' data-bind='value: jsonData'> </textarea>
<button data-bind='click: getData'>get Data</button>