2013-06-27 23 views
2

當在句柄模板中使用linkTo helper時,Ember通過已添加到路由的序列化程序的幫助設置鏈接的正確URL:Ember(data)linkTo不通過模型,只取得新模型

serialize: function(slug, params) { 
    var name, object; 
    object = {}; 
    name = params[0]; 
    object[name] = slug; 
    return object; 
} 

當我單擊鏈接時,Ember轉換到正確的頁面,並顯示正確的slug和所有內容,但它沒有正確的數據,並且它說。我相信這是因爲我傳遞給我的linkTo語句作爲第二個參數只是slu and而不是整個模型。

是否有可能讓Ember簡單地獲取數據,就像我只是在地址欄中鍵入URL一樣,而不是依賴於傳遞給linkTo語句的模型(不是)?

UPDATE 我已經嘗試過在我的路線上的激活方法,但現在看來問題是渲染必須等到完成。

activate: function() { 
    this.context.isLoaded = false; 
    this.model(this.context.query.slug); 
} 

任何想法?也許即使有一個更漂亮的解決方案?

回答

4

我想出了最後,從IRC上的一些人幫助的解決方案,是使用setupController鉤,就像你提到的,達山,以及串行化這樣的:

CustomRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
     var modelName = this.routeName.substr(0, 1).toUpperCase() + this.routeName.substr(1), 
      slug = model; 
     if (model.hasOwnProperty('slug')) 
      slug = model.slug; 
     controller.set('model', App[modelName].find({'slug': slug})); 
    }, 
    serialize: function(slug, params) { 
     var name, object; 
     object = {}; 
     name = params[0]; 
     object[name] = slug; 
     return object; 
    } 
}); 

這樣,你可以只提供路由的段落作爲第二個參數給linkTo幫助器而不是模型,並且序列化器將正確設置URL,然後setupController將檢查模型是否有一個屬性slug ,這恰好意味着它是一個合適的模型,如果它不合適,它只是猜測模型只是slu,子,而且那麼它將使用DS.Model.find方法向控制器模型存儲返回一個承諾。

因爲每次輸入路由時都會調用setupController,因爲有時只會調用模型鉤子,所以每次都會使用DS.Model.find方法通過promise獲取數據,並且每次都會獲取數據你輸入一條路線。

這假設你使用Ember.Data,並且你的模型對象被稱爲App。* route name *,以大寫字母開頭,但它可以很容易地被修改以適應任何可能的需要。

對於我的應用程序中的所有路線,我現在從這個路線子類(擴展),從而得到我所需的行爲,我所有的路線。

0

您可以嘗試在Route中使用slug名稱,然後使用findQuery而不是find加載該路線的數據。

App.Router.map(function() { 
    this.resource('product', { path: '/product/:slug' }); 
}); 

App.ProductRoute = Ember.Route.extend({ 
    model: function(params) { 
    return App.Product.query({name:params.slug}); 
    } 
}); 
+1

該方法現在被稱爲查詢正確,是DS.Store.findQuery的別名,是嗎?反正 - 那該怎麼辦?問題不在於找不到任何東西。問題是,如果路線具有動態分段並且正在通過例如轉移到路線模型方法,則不執行路線模型方法。 linkTo幫助器,這是我想要改變,所以它*總是*得到執行。 – chrisbuchholz

+0

是的,修正了這個問題。 –

+1

通過url的路徑通過模型鉤子獲取它的模型,並通過直接通過setupController的render/linkTo helper,跳過模型鉤子。在這兩種情況下,路線仍然會得到它的模型。或者我不明白這個問題嗎? –