2014-01-19 59 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