2013-03-06 27 views
0

我尝试创建我的第一个ember.js应用程序。一个日历]ember.js在对话框中加载数据

我一天模型

App.Day = Ember.Object.extend({ 
today : null, 
dayNumber : null, 
addEvent : function() { 
    console.log(this); 
    $("#myModal").modal('show'); 
} 
}); 

HTML视图

<div class="cal"> 
    {{#each App.DayList}} 
     {{#if this.today}} 
     <div class="day today" {{action "addEvent" target="model" }}> 
      {{#with this as model}} 
      <span class="text">{{this.dayNumber}}</span> 
      {{/with}} 
     </div> 
     {{else}} 
     <div class="day" {{action "addEvent" target="model" }}> 
      {{#with this as model}} 
      <span class="text">{{this.dayNumber}}</span> 
      {{/with}} 
     </div> 
     {{/if}} 
    {{/each}} 
    </div> 

等点击一天我会让引导对话框,我不会加载extern数据,但我需要的信息关于点击的一天。

我的理解是我创建一个视图

App.DayDetails = Ember.View.extend({ 

}); 

这种观点里面我发送一个Ajax请求,但如何获得关于此视图中单击天信息?

回答

2

你应该差不多从来没有在视图中做任何AJAX。

意见做两件事情:

(1)绘制自己

(2)

你的观点应该从控制器获取其内容的UI事件(点击,打字等)作出反应,在这种情况下,我假设App.DayController或DayDetailsController。 (这是另一回事,最好的做法是用ViewController等来终止你的子类,所以它们一目了然地显示它们的作用)。

控制器从哪里获取数据可能会使事情变得复杂。理想情况下,在一个成熟的应用程序中,您将有一个数据存储(—的概念—您的服务器端数据库和ActiveRecord,如果您使用rails)将被查询。但是,简单地说,您可以让控制器负责使用jQuery来手动处理ajax请求。只要我们采取捷径,您可以在多个位置(单身控制器,特定日期的项目控制器,日模型本身)进行此类调用,而不是视图。当采取这些捷径来限制传染时,这很重要......你应该用手动操作ajax获取JSON,然后立即通过将其设置为内容一个数组控制器。也就是说,不需要手动或手动将数据插入到视图中进一步或两步。如果你能避免它,不要与Ember战斗。

有几件事情:

(1)您使用的this是多余的,因为是{{with}}语句。在{{each}}块内,上下文在迭代中将是当前对象(或其包装控制器,如果您使用itemController)。 (除非使用“x in y”语法,在这种情况下,上下文仍然是控制器)

(2)模型不应尝试修改DOM。相反,依靠绑定和您的控制器来协调UI更改。你可能想要做的是有一个App.DayController,你可以把addEvent,然后在你的{{each}}使用itemController="App.DayController".

App.DayController = Ember.ObjectController.extend({ 
    addEvent: function() { 
     // ... 
    } 
}); 

之后,上下文每个循环在你的{{each}}模板将是每个人一天控制器。控制器将自动成为视图的目标和背景让你的模板看起来像这样:

{{#each App.DayList itemController="App.DayController"}} 
    <div {{bindAttr class=":day today"}} {{action addEvent}}>{{dayNumber}}</div> 
{{/each}} 

(在:day:意味着day将永远是一类,但today只会是一个类,如果today财产的上下文是truthy)

由于每一天发送addEvent自己的控制器,没有必要确定加载哪一天。

+0

或者,您可以避开DayController/itemController方案,并将当前项(作为'this')作为参数传递给DayList上的addEvent操作。 – 2013-03-20 16:09:30