2013-08-08 6 views
0

Один из моих моделей данных имеет такую ​​структуру данных:Walking объекта в шаблоне

properties : { 
    .... 
    locator_map : { 
     locator1 : locator_doc_id1, 
     locator2 : locator_doc_id2, 
     ... 
     locatorN : locator_doc_idN, 
    }, 
    ... 
} 

В моем шаблоне я хочу предоставить ссылки на эти документы, но я не знаю, как ходить объект locator_map. Я хочу сделать что-то на этих линиях:

{{#each locator in this.properties.locator_map}} 
    {{#linkTo "locators.show" this.properties.locator_map[locator]}}locator{{/linkTo}} 
{{/each}} 

Но у меня есть две проблемы:

  1. «Утверждение не удалось:. Значение, которое #each перебирает должен быть массивом Вы прошли [объект Object] "
  2. Как получить доступ к значению? У меня сложилось впечатление, что this.properties.locator_map[locator] не собирается работать.

Любая идея, как ходить по объекту?

ответ

1

Причина, почему это не работает, потому что почти все в рамках Ember простирается от Ember.Object но ваши locator «s нет, поэтому у вас есть два варианта:

  1. Создание пользовательских Рули {{#each}} помощник, который занимается с вашими не являющиеся Ember.Object «ы
  2. Разбирают данные возвращаются из бэкэнда и конвертировать locator_map объектов Ember.Object» ы это сделает, то объекты также связывание знает и т.д.

См. Также это answer Недавно я ответил, что касается аналогичного случая.

Надеюсь, это поможет.

+1

Спасибо, это помогло! Добавлен ответ с решением. – dangonfast

1

Как было предложено @intuitivepixel, это мое преобразование:

// Used to represent a generic key:value mapping 
DS.RESTAdapter.registerTransform('dict', { 
    serialize: function(data) { 
     var dict = {}, element; 
     for (var i = 0; i < data.length; i++) { 
      element = data[i]; 
      dict[element.get('key')] = element.get('value'); 
     } 
     return dict; 
    }, 
    deserialize: function(dict) { 
     var data = Ember.A(), element; 
     for (var key in dict) { 
      data.push(Ember.create({ key: key, value: dict[key] })); 
     } 
     return data; 
    } 
}); 

Модель:

SettingsApp.ServiceProperties = SettingsApp.CommonProperties.extend({ 
    locator_map : DS.attr('dict'), 

}); 

SettingsApp.Service = DS.Model.extend(SettingsApp.NodeMixin, { 
    properties : DS.belongsTo('SettingsApp.ServiceProperties') 
}); 

и использование на шаблоне:

{{#each locator in this.properties.locator_map}} 
    {{#linkTo "locators.show" locator.value}}{{locator.key}}{{/linkTo}} 
{{/each}}