2013-05-31 5 views
0

Я пытаюсь проверить, могу ли я присвоить переменную JavaScript значение значения наблюдаемого KO.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 и тип. Я просто хочу знать, могу ли я получить только избранные значения. – Jesse

+0

Возможно, вы сможете что-то сделать с плагином для отображения нокаутов, но я не уверен в синтаксисе от верхней части головы –

ответ

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)); 

В Knockout, наблюдаемыми являются функциями , Чтобы установить его значение, вы вызываете его с помощью параметра. Чтобы получить его значение, вы его вызываете.

В массивах JavaScript есть функция среза, которая может использоваться для получения меньшего массива.

UPDATE на основе замечаний по этому вопросу:

Если вы хотите взять п полей из ViewModel, ko.toJSON будет работать на subsetted модели представления:

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); 

Если вы хотите только определенные поля, создать подмножествую модель с таковыми:

var jsonData = ko.toJSON({ 
    firstName: viewModel.firstName, 
    type: viewModel.type 
}); 
Смежные вопросы