2014-10-14 7 views
0

Мне сложно понять arrayController и ObjectController в Ember (по крайней мере, я думаю, что это точка.) Я работаю с ArrayController, и мне нужно получить моделировать и модифицировать его. (Взять сегодня модель и сделать для того, чтобы выяснили, сколько дней в месяц), но каждый раз, когда я делаю:Ember ArrayController this.get не работает

this.get("today") 

ничего не случится. Что из документации, вот как это должно быть вызвано.

Если посмотреть на другой, например, большинство людей используют ObjectController, поэтому я попробовать с этим один тоже, но я получил сообщение об ошибке жалуясь цикл #each я использую нужен ArrayController

Вот мой код до сих пор:

// Router

WebCalendar.Router.map(function() { 
    this.resource('index', {path: '/'}, function() { 
     this.resource("cal", {path: '/'}); 
     this.resource("location", {path: '/location'}); 
     this.resource("organization", {path: '/organization'}); 
    }); 
}); 

WebCalendar.CalRoute = Ember.Route.extend({ 
    model: function(){ 
     return this.store.find('dates'); 
    } 
}); 

// Модель

WebCalendar.Dates = DS.Model.extend({ 
    today: DS.attr('date'), 
    month: DS.attr('date'), 
    year: DS.attr('date'), 
    daysName: DS.attr('array'), 
    daysInMonth: DS.attr('array') 
}); 


WebCalendar.Dates.FIXTURES = [ 
    { 
     id: 1, 
     today: moment().format('MMMM Do YYYY, h:mm:ss a'), 
     month: moment().format('MMM'), 
     year: moment().format('YYYY'), 
     daysName: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], 
     daysInMonth: [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] 
    } 
]; 

// CalController

WebCalendar.CalController = Ember.ArrayController.extend({ 
    getMonthDays: function(){ 
     return this.get("today"); 
    }.property('today') 

}); 

// Cal Рули

<table> 
    {{#each date in controller}} 
    <tbody id="table"> 
     <tr id="year"> 
      <td>{{date.year}}</td> 
     </tr> 
     <tr> 
      <td id="prev-month"> Prev </td> 
      <td id="month">{{date.month}}</td> 
      <td id="next-month"> Next </td> 
     </tr> 

     <tr id="days-of-week"> 
      {{#each date.daysName}} 
       <td>{{this}}</td> 
      {{/each}} 
     </tr class="days"> 
     <tr>{{getMonthDays}}</tr> 
    </tbody> 
    {{/each}} 
</table> 

Мои вопросы:

  • Почему this.get метод не работает? Документация здесь: http://emberjs.com/api/classes/Ember.ArrayController.html#method_get

  • Правильно, что я использую ArrayController в этой конкретной ситуации?

  • Почему я не могу использовать #each loop с ObjectController?

+0

Можем ли мы увидеть маршрут, включая '' model' и setupController' крючками? –

+0

Да, только что добавил. Я не использую setupController вместо store.find() –

+0

Каковы симптомы? –

ответ

0

{{getMonthDays}} в настоящее время вызывается в {{each}}, что означает, что она вызывается в контексте отдельных Dates объектов, но вы определяете его на ArrayController - где Эмбер не будет даже смотреть. Вы путаетесь между ArrayController, управляющим коллекцией экземпляров модели, и отдельными экземплярами модели (или контроллерами для них, которые вы еще не определили).

Вам необходимо itemController. Я отсылаю вас к документации, а не суммирую ее здесь. getMonthDays будет методом на контроллере элемента.

Кстати,

getMonthDays: function(){ 
    return this.get("today"); 
}.property('today') 

часто лучше написана как

getMonthDays: Ember.computed.alias('today') 

или

getMonthDaysBinding: 'today' 
+0

«Вы путаетесь между ArrayController, управляющим коллекцией экземпляров модели, и отдельными экземплярами модели (или контроллерами для этого, которые вы еще не определили)« Да! Я знаю, что могу сделать в модели, но я думал, что это не то место, где это можно сделать. –

+0

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

+0

приятно поблагодарить вас. Я сейчас пытаюсь. Вопрос: Почему вы сказали, что itemController может быть сложным? И спасибо за лучший способ написать это, но я всегда удивляюсь, почему в Ember так много вещей, которые не документированы или нелегко узнать. –

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