2013-05-31 49 views
0

我想知道是否可以將JavaScript變量賦值給KO Observable的值。KnockoutJS - 將可觀察值賦值給JavaScript變量

原因是我想把它分配給一個jQuery模塊,作爲一個屬性。

我知道我可以做:

var viewModel = { 
    firstName : ko.observable("Bert"), 
    lastName : ko.observable("Smith"), 
    pets : ko.observableArray(["Cat", "Dog", "Fish"]), 
    type : "Customer" 
}; 
viewModel.hasALotOfPets = ko.computed(function() { 
    return this.pets().length > 2 
}, viewModel) 


var jsonData = ko.toJSON(viewModel); 

但是,如果我不想要的一切,這是在視圖模型?我可以只選擇n個項目嗎?

+0

你想忽略哪些項目?是否足夠少,你可以手動排除他們? –

+0

不一定。這只是我提供的一個例子。但是,例如,我只想得到像firstName和type。我只想知道我是否只能獲得選擇值。 – Jesse

+0

你或許可以用knockout貼圖插件做些什麼,但我不確定頭頂的語法 –

回答

1

有兩個概念這裏:

  1. 檢索從可觀察到的
  2. 操縱JavaScript陣列

代碼淘汰賽對象:

var start = 1; // index of Dog 
var n = 1; // just one item 
var jsonData = ko.toJSON(viewModel.pets().slice(start, start + n)); 

在敲除,可觀測量是功能。要設置其值,可以使用參數調用它。爲了得到它的價值,你可以稱之爲它。

JavaScript數組有一個切片函數,可用於獲取較小的數組。

如果你想利用從視圖模型,ko.toJSON n個字段在子集化的視圖模型將工作:

var n = 2; 
var count = 0; 
var subModel = {}; 
for (var k in viewModel) { 
    if (count >= n) break; 
    if (viewModel.hasOwnProperty(k)) { 
     subModel[k] = viewModel[k]; 
     count++; 
    } 
} 

var jsonData = ko.toJSON(subModel); 

如果您只需要特定的領域,創建基於有關問題的評論

UPDATE一個子集模型與那些:

var jsonData = ko.toJSON({ 
    firstName: viewModel.firstName, 
    type: viewModel.type 
});