在可观察数组中不需要单独引用底层数组,它只会混淆事情。使用读取值
self.inventoryItems()
.
实时查看模型外观的一个好方法是使用带有
data-bind="text: ko.toJSON($data, null, '\t')"
function EditableField(initialValue) {
this.value = ko.observable(initialValue);
}
var model = function() {
var self = this;
self.inventoryItems = ko.observableArray(["Value1", "V1lue2", "Value3", "Value4"].map(function(item) {
return new EditableField(item);
}));
self.addItems = function(vm) {
self.inventoryItems.push(new EditableField('New Item'));
}
self.SaveInventory = function(data) {
console.log(ko.toJS(self.inventoryItems));
};
};
ko.applyBindings(new model());
ul {
list-style: none;
}
li {
margin-top: 5px;
}
.info-text,
a,
button {
margin-top: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: inventoryItems">
<li>
<input data-bind="textInput: value" />
</li>
</ul>
<div>
<a data-bind="click: addItems">+ Add more</a>
</div>
<button type="submit" class="btn btn-accent" data-bind="click: SaveInventory">Save changes</button>
<pre class='info-text' data-bind="text: ko.toJSON($data, null, '\t')">
</pre>