Раньше у меня был свой собственный link-to
помощник, о котором я писал около here.emberjs - refactor custom link-to to htmlbars
С рулю я мог передать аргументы, которые могут вызвать повторную визуализацию, если значение изменилось, например, если я привязку к модели, которая имеет isLoaded=false
, то LinkView
вид будет повторно визуализироваться при isLoaded=true
или значение изменилось с неопределенного к его значению.
Ниже мой старый рули пользовательский ссылка-на Helper
Ember.Handlebars.registerHelper('resource-link-to', function(path, options) {
var args = Array.prototype.slice.call(arguments, 1);
var resource = this.get(path);
var resourceRoute = resource.humanize();
if (!options.fn) {
options.types = ['STRING', 'STRING', 'ID'];
options.contexts = [this, this, this];
args.unshift(path);
args.unshift(resourceRoute);
args.unshift(resource.get('displayName'));
} else {
options.types = ['STRING', 'ID'];
options.contexts = [this, this];
args.unshift(path);
args.unshift(resourceRoute);
}
return Ember.Handlebars.helpers['link-to'].apply(this, args);
});
ID
маркер в этой линии означало это было обязательным:
options.types = ['STRING', 'STRING', 'ID'];
Я пытаюсь повторить это в htmlbars в уголек 1.13.11
, и я расширил LinkComponent
и обернул willRender
следующим образом:
export default LinkComponent.extend({
willRender() {
// FIXME: allow for css classes and query params
Ember.assert('you must specify a resource', this.attrs.resource);
const resource = this.attrs.resource;
let resourceRoute = resource.value.humanize();
if(typeToLinks[resourceRoute]) {
resourceRoute = typeToLinks[resourceRoute];
}
this.set('attrs', {
params: [resource.value.get('displayName'), resourceRoute, resource],
view: this.parentView,
hasBlock: false,
escaped: true
});
this._super(...arguments);
}
});
Я тогда называем это следующим образом:
{{resource-linkto resource=activity.reference}}
Проблема заключается в том, что resource
может быть в состоянии isLoaded=false
, как она частично решена.
Как я могу вызвать повторную визуализацию, когда значение будет разрешено, как я делал в рулях?