Ember ArrayController this.get不起作用

时间:2014-10-14 09:58:42

标签: ember.js ember-data

我很难理解Ember中的arrayController和ObjectController(至少我认为这是重点。) 我正在使用ArrayController,我需要获取一个模型并进行修改。 (以今天的模式制作,以便弄清楚一个月内有多少天)但每次都这样做:

this.get("today")
什么都没发生。从文档中可以看出它应该如何调用。

如果我查看其他示例,大多数人都使用ObjectController,所以我也尝试使用它,但我得到一个错误抱怨#each循环我正在使用需要一个ArrayController

到目前为止,这是我的代码:

//路由器

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 Handlebars

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

我的问题是:

1 个答案:

答案 0 :(得分:0)

{{getMonthDays}}中调用了{p> {{each}},这意味着它是在各个Dates对象的上下文中调用的,但是你是在ArrayController上定义它的--Ember赢了&甚至看。您在管理模型实例集合的ArrayController和单个模型实例(或者您尚未定义的控制器)之间感到困惑。

您需要 itemController 。我建议您使用文档,而不是在此总结。 getMonthDays将是项目控制器上的一种方法。

顺便说一下,

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

通常写得更好

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

getMonthDaysBinding: 'today'