2014-02-18 7 views
2

Я изучаю магистраль, и я пытаюсь инициализировать объект, но я получаю пустой объект в результате с консоли. Что я делаю не так ?Инициализация базовой модели

Month = Backbone.Model.extend({ 
    month:"a", 
    values:[ 
     {label:"Total", value:0}, 
     {label:"Expenses", value:0}, 
     {label:"Profit", value:0} 
    ] 
}); 
var x = new Month(); 
console.log(x.toJSON()) 

ответ

3

Backbone.Model это единственный объект, вы не можете инициализировать его с массивом.

Но вы можете инициализировать его с помощью одного объекта, как это:

Month = Backbone.Model.extend({ 
    defaults: {label:"Total", month:"a", value:0} 
}); 
var x = new Month(); 
console.log(x.toJSON()) 
+0

О, как я глупо от меня ... Спасибо, я согласен через 9 минут – Syd

0

Когда создания экземпляра модели, вы можете передать в начальных значениях атрибутов, которые будут установленный на модели. Если вы определите функцию initialize, она будет вызываться, когда модель создана.

Source

defaults хэш (или функция) может быть использован для определения по умолчанию атрибуты для вашей модели. При создании экземпляра модели любые неизвестные атрибуты будут установлены в их значение по умолчанию.

Source

0
var Month = Backbone.Model.extend({ 
    // you put your Model's methods here or override existing Backbone Model methods here 
}); 
var x = new Month({ 
    // you put the data of the model here 
    month:"a", 
    values:[ 
    {label:"Total", value:0}, 
    {label:"Expenses", value:0}, 
    {label:"Profit", value:0} 
    ] 
}); 
console.log(x.toJSON()) 

UPDATE Один важный момент в том, что массив значений будет разделяться между всеми экземплярами этой модели, потому что она инициализируется во время выполнения файла и быть ссылки на атрибут value. Итак, если у вас есть 2 модели и скажите, измените значение Expenses в массиве в модели 1, то также будет обновлен номер Expenses в модели 2. Что-то вроде https://github.com/powmedia/backbone-deep-model может помочь справиться с глубоко вложенными данными.

+1

Это отличается от того, что хочет OP. Здесь вы устанавливаете значения после создания экземпляра объекта. В этом вопросе OP спрашивает, как устанавливать значения модели, а не ее экземпляра. – Lix

+0

Где он спрашивает?Он говорит: «Я пытаюсь инициализировать объект, но я получаю пустой объект», - и я показал, как идиоматически «инициализировать объект со значениями». Почему вы предполагаете, что он хочет дефолтов? – Karolis

+0

Что заставляет меня думать, что именно здесь находятся значения. Они помещаются в определение модели, а не в экземпляр. – Lix

1

Что вы хотите сделать, это установить значения по умолчанию для этой модели.

Month = Backbone.Model.extend({ 
    defaults:{ 
    month:"a", 
    values:[ 
     { total: { label:"Total", value:0 }}, 
     { expenses: { label:"Expenses", value:0 }}, 
     { profit: { label:"Profit", value:0 }}, 
    ] 
    } 
}); 

Это позволит убедиться, что при создании объекта Month, он будет иметь в его атрибуты тех атрибутов, которые вы определили в значениях по умолчанию объекта. (Я немного изменил данные, но я думаю, что вы получили идею из моего примера).

Вы можете прочитать в документации: http://backbonejs.org/#Model-defaults

Значения по умолчанию хэш (или функция) может быть использован для указания атрибутов по умолчанию для вашей модели. При создании экземпляра модели любые неопределенные атрибуты будут установлены в их значение по умолчанию.

+1

«месяц» является предопределенным значением по умолчанию. Я думаю, вы забыли включить его в значения по умолчанию – Syd

+0

@PanagiotisGeorgeRaditsas - oops. да вы правы. – Lix

Смежные вопросы