我想綁定一個JSON包含可選字段使用敲除js。 問題是我不斷收到此錯誤:Knockout綁定可選字段
Unable to process binding "value: function..."
當我需要他們仍然下落不明
(缺少的字段從「父」 JSON採取)我不能添加缺少的領域有沒有任何選項可以告訴淘汰賽js忽略這些字段,只有在用戶輸入字段中的任何內容時才添加它們?
我想綁定一個JSON包含可選字段使用敲除js。 問題是我不斷收到此錯誤:Knockout綁定可選字段
Unable to process binding "value: function..."
當我需要他們仍然下落不明
(缺少的字段從「父」 JSON採取)我不能添加缺少的領域有沒有任何選項可以告訴淘汰賽js忽略這些字段,只有在用戶輸入字段中的任何內容時才添加它們?
你可以使用hasOwnProperty嗎?
var data = {
foo1: 'bar1',
foo3: 'bar3'
}
function viewModel(mydata) {
var self = this;
this.foo1 = ko.observable(mydata.foo1);
this.foo2 = ko.observable(mydata.hasOwnProperty('foo2') ? mydata.foo2 : '');
this.foo3 = ko.observable(mydata.foo3);
}
var vm = new viewModel(data);
(function($) {
ko.applyBindings(vm); //bind the knockout model
})(jQuery);
布賴恩,感謝您的答案。它可以工作,但我需要將JSON轉換爲可觀察對象,並且我有超過40個複雜層次結構的字段。 有沒有更簡單的解決方案? – Tals
也許另一可能性是使用こ映射插件和與數據結合下面運行段。
var partial = {value : 456};
var full = { key: "abc",
value : 123};
function viewModel() {
var self = this;
this.full=ko.observable('');
this.partial=ko.observable('');
this.applyFull = function(){
self.full(ko.mapping.fromJS(full));
self.partial('');
}
this.applyPartial = function(){
self.full('');
self.partial(ko.mapping.fromJS(partial));
}
}
var vm = new viewModel();
(function($) {
ko.applyBindings(vm); //bind the knockout model
})(jQuery);
<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>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>
<div data-bind="with: full">
Key <input type="text" data-bind="value: key"> Value <input type="text" data-bind="value: value">
</div>
<div data-bind="with: partial">
Value <input type="text" data-bind="value: value">
</div>
<button data-bind="click: applyFull"> apply Full </button>
<button data-bind="click: applyPartial"> apply Partial </button>
如果使用屬性語法,就像$data.property
您可以綁定到一個不存在的視圖模型屬性。
<input type="text" data-bind="value: $data.key">
所有的答案是好的,但過於複雜,在我的小系統來實現。
看來問題是試圖訪問不存在的內部對象內的字段。 (例如,main.inner.price
內部未定義時) 我最終創建一個空對象,只要它在主對象中缺少main.inner = main.inner || {}
我們可以得到一個jsfiddle或plunkr的問題嗎? –
這很複雜。 我做了一個簡單的例子:[鏈接](https://jsfiddle.net/hrfq3wdh/1/) 這個想法有時我有一個完整的JSON,有時我有局部。 我不能添加空字段,除非用戶打算添加字段(這是一個子/父繼承機制) – Tals
如果你點擊「應用完整」 - 它會工作。我只需要「應用部分」將忽略缺失的字段,並創建它,如果用戶在輸入字段輸入東西 – Tals