2014-01-19 92 views
0

我有一個問題,我無法使用這個jsbin中的燈具創建。Ember.js - 獲取LinkView以重新渲染車把手幫手

上面的代碼確實是圍繞鏈接到車把輔助包裝:

Ember.Handlebars.registerHelper('resource-link-to', function(name, options) { 
    var args = Array.prototype.slice.call(arguments, 1); 
    var resource = this.get(name); 
    var resourceRoute = resource.humanize(); 

    if (!options.fn) { 
    options.types = ['STRING', 'STRING', 'ID']; 
    options.contexts = [this, this, this]; 
    args.unshift(name); 
    args.unshift(resourceRoute); 
    args.unshift(resource.get('displayName')); 
    } else { 
    options.types = ['STRING', 'ID']; 
    options.contexts = [this, this]; 
    args.unshift(name); 
    args.unshift(resourceRoute); 
    } 

    var observer, 
    _this = this; 

    if (!resource.get('isLoaded')) { 
    observer = function() { 
     if (resource.get('isLoaded')) { 
     //WHAT CAN I DO HERE TO GET THE LinkView to rerender? 
     return resource.removeObserver('isLoaded', observer); 
     } 
    }; 
    resource.addObserver('isLoaded', observer); 
    } 

    return Ember.Handlebars.helpers['link-to'].apply(this, args); 
}); 

我想實現的是一個通用的鏈接,以幫助這需要我的任何燼的數據模型和返回鏈接:

{{resource-link-to contact}} 
{{resource-link-to user}} 

這個偉大的工程用燈具但是當代碼轉發執行不會有真正的適配器工作,因爲該模型並不總是裝使用真正的鏈接 - 幫手或可能是另一種方式解決這個問題?

我想要做的是創造一個觀察者認爲重新呈現當資源被加載這樣的LinkView:

var observer, 
    _this = this; 

    if (!resource.get('isLoaded')) { 
    observer = function() { 
     if (resource.get('isLoaded')) { 
     //WHAT CAN I DO HERE TO GET THE LinkView to rerender? 
     return resource.removeObserver('isLoaded', observer); 
     } 
    }; 
    resource.addObserver('isLoaded', observer); 
    } 

有誰知道我怎麼能得到LinkView重新呈現?

+0

這是一個有趣的想法,我沒有看到任何模板區域將在異步模型返回之前呈現。 – Kingpin2k

+0

另一種方法可能是讓LinkView的子類執行某些操作。我需要更好地理解LinnkView的工作原理。 – dagda1

+0

鏈接視圖是一個綁定的幫助器,你是否嘗試過在args對象上使用Em.set,並查看鏈接是否更新? – Kingpin2k

回答

0

我寫了一篇關於我想出的解決方案here