2013-03-06 50 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