2014-02-16 7 views
1

У меня есть базовая модель, называемая компаниями с типом массива объектов. Поставив его на консоль я получаю это:Как получить атрибуты из массива объектов?

Этот объект загружается с функцией выборки:

require(["collections/Companies"], 
    function(Companies) { 
    var companies = new Companies(); 
    companies.fetch(); 
    console.log(companies[0].get("name")); 

}); 

companies

companies.js:

define([ 
    'models/Company' 
], function(CompanyModel) { 
    'use strict'; 

    var CompanyCollection = Backbone.Collection.extend({ 
     model: CompanyModel, 
     url: 'scripts/data/companies.json' 
    }); 

    return CompanyCollection; 
}); 

company.js:

define([], function() { 
    'use strict'; 

    var CompanyModel = Backbone.Model.extend({ 
     defaults: { 
      id: '', 
      name: '', 
      description: '' 
     } 
    }); 

    return CompanyModel; 
}); 

Я попытался получить атрибуты, используя get в соответствии с tutorials (console.log(companies[0].get("name"));) без везения.

Каков правильный синтаксис для получения атрибутов?

Заранее спасибо

+0

'компании [0] .attributes.name' или' компании [0] .attributes ["name"] 'Доступ к нему, как показано на скриншоте! :) – MackieeE

+0

Обе компании [0] .attributes.name или компании [0] .attributes ["name"] throws TypeError: компании [0] не определены в журнале. – xanyi

+0

Я думаю, что мы тут что-то теряем, так как ванильный JavaScript, безусловно, как вы получите доступ к атрибуту DOMNode. – MackieeE

ответ

2

Чтобы получить модель из коллекции можно использовать метод сбора Backbone - collection.at (INDEX);

Пример кода:

var collection = new Backbone.Collection(); 
collection.add({ id: 1, name: "S"}); 
collection.add({ id: 2, name: "F"}); 

console.log(collection.at(0).attributes); // { id: 1, name: "S"} 

var model = collection.at(0); 

// get attributes from model 

console.log(model.get("name")); // "S" 

Вы можете играть с demo

Чтобы получить модели из коллекции использования: collection.models (вы получите множество моделей)

1

Поскольку name является свойство внутри attributes, который является объектом, вы можете использовать:

console.log(companies[0].attributes.name); 
+0

Обе компании [0] .attributes.name или компании [0] .attributes ["name"] throws TypeError: компании [0] не определены в журнале. – xanyi

+0

@xanyi Что такое 'компании [0]' в вашем коде? – Felix

+0

Как вы инициализируете свою модель? Можете ли вы разместить свой код? – Felix

0

объект, который вы печатаете в Backbone Collection. Вам нужно получить доступ к модели, используя массив collection.models.

var name = companies.models[0].get("name"); 

Согласно документации, вы должны получить доступ к модели с помощью метода, приведенного collection.get модельного идентификатора или с использованием методой collection.at данного показателя.

Таким образом, вы можете получить доступ к объекту компании, как:

var company = companies.get(1000001); 
var name = company.get("name"); 

Документация: http://backbonejs.org/#Collection-models

+0

TypeError: компания не определена с тем же кодом, который вы написали. – xanyi

0

Только от второго изображения это должно работать:

require(["collections/Companies"], 
    function(Companies) { 
    var companies = new Companies(); 
    companies.fetch(); 
    for (var idx in companies){ 
     console.log(companies[idx].attributes.name); 
    } 
}); 

Нет companies[0] только companies[1000001] и companies[1000002].

+0

Я понимаю, что индексы 1000001 и 1000002, но компании [ничего] все еще не определены. – xanyi

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