Javascript 超载“;链接至;ember.js中的helper
我正在尝试创建一个自定义帮助器,它执行与链接到的相同的操作,只是有一些假设 我试图做到这一点:Javascript 超载“;链接至;ember.js中的helper,javascript,jquery,ember.js,Javascript,Jquery,Ember.js,我正在尝试创建一个自定义帮助器,它执行与链接到的相同的操作,只是有一些假设 我试图做到这一点: {{{#我的widget.href链接}{{{widget.title}{{{/my链接到}} 它只接受路由参数(widget.href),并且假定路由为“根”。下面是我如何实施它的: Ember.handlebar.registerHelper('my-link-to',function(){ var args=[].slice.call(参数); args.unshift('root');//
{{{#我的widget.href链接}{{{widget.title}{{{/my链接到}}
它只接受路由参数(widget.href),并且假定路由为“根”。下面是我如何实施它的:
Ember.handlebar.registerHelper('my-link-to',function(){
var args=[].slice.call(参数);
args.unshift('root');//始终使用'root'路由
返回余烬.把手.助手['link-to'].应用(此,args);
});
但是,我得到的链接结果都指向/#
,我得到一个此链接处于非活动加载状态,因为它的至少一个参数当前具有空值/未定义值,或者提供的路由名称无效。
错误
执行{{{my link to'root'widget.href}{{{widget.title}}{{/my link to}}
和删除args.unshift('root')
的工作与预期一样
我有一把小提琴在这里演示:
我对Ember.js真的很陌生,所以如果我做错了什么,请告诉我。我想我已经解决了你的问题 1。你的例子弄错了 您正在将
'root'
添加到我的works链接
帮助程序:
{{#my-link-to-works 'root' widget.href}}
在my-link-to-fails
helper上执行取消移位。所以实际上这两个例子是不同的。一个有两个参数(例如:'root'和'/widget/foo'),另一个只有一个参数(例如:'/widget/foo')
2。无论如何,当第一个参数是“root”时,为什么它会起作用?
第一个参数必须是routeName
。此助手还可以接收第二个参数,该参数将其值附加到已解析的路由。你的论点就是这样被解释的。如果检查示例,工作链接将解析为,例如,#//widget/foo
。您可能会注意到那里有两个正斜杠,这是您解析的路由#/
+您的段值/widget/foo
的结果
3。解决方案?
直接使用指向帮助程序的链接:{{link to'widget''widget.href'}
并从href字符串中删除/widget/
部分,或者执行以下操作:
助手:(这与直接使用链接到相同)
更改您的小部件href并只保留动态段:
App.IndexRoute = Ember.Route.extend({
model : function() {
return {
widgets: [
{ href: 'foo' },
{ href: 'bar' },
{ href: 'baz' }
]
};
}
});
我想我已经解决了你的问题 1。你的例子弄错了 您正在将
'root'
添加到我的works链接
帮助程序:
{{#my-link-to-works 'root' widget.href}}
在my-link-to-fails
helper上执行取消移位。所以实际上这两个例子是不同的。一个有两个参数(例如:'root'和'/widget/foo'),另一个只有一个参数(例如:'/widget/foo')
2。无论如何,当第一个参数是“root”时,为什么它会起作用?
第一个参数必须是routeName
。此助手还可以接收第二个参数,该参数将其值附加到已解析的路由。你的论点就是这样被解释的。如果检查示例,工作链接将解析为,例如,#//widget/foo
。您可能会注意到那里有两个正斜杠,这是您解析的路由#/
+您的段值/widget/foo
的结果
3。解决方案?
直接使用指向帮助程序的链接:{{link to'widget''widget.href'}
并从href字符串中删除/widget/
部分,或者执行以下操作:
助手:(这与直接使用链接到相同)
更改您的小部件href并只保留动态段:
App.IndexRoute = Ember.Route.extend({
model : function() {
return {
widgets: [
{ href: 'foo' },
{ href: 'bar' },
{ href: 'baz' }
]
};
}
});
传递给handlebars视图辅助对象的每个参数都有一些附加信息。所以
args.unshift('root')
还不够,您需要说明“root”的含义:绑定字符串文本等。在您的情况下是字符串文本,因为预期用途是:
{{#my-link-to-works 'root' widget.href}}
您需要在选项哈希类型
键中使用字符串
Ember.Handlebars.registerHelper('my-link-to-fails', function() {
var args = [].slice.call(arguments),
options = args[args.length-1]; // last argument is always the options hash
args.unshift('root');
// the types says what is the type of each argument, in that case we need STRING
options.types.unshift('STRING');
return Ember.Handlebars.helpers['link-to'].apply(this, args);
});
我用这段代码更新了你的fiddle,请看一看传递给Handlebar视图助手的每个参数都有一些附加信息。所以
args.unshift('root')
还不够,您需要说明“root”的含义:绑定字符串文本等。在您的情况下是字符串文本,因为预期用途是:
{{#my-link-to-works 'root' widget.href}}
您需要在选项哈希类型
键中使用字符串
Ember.Handlebars.registerHelper('my-link-to-fails', function() {
var args = [].slice.call(arguments),
options = args[args.length-1]; // last argument is always the options hash
args.unshift('root');
// the types says what is the type of each argument, in that case we need STRING
options.types.unshift('STRING');
return Ember.Handlebars.helpers['link-to'].apply(this, args);
});
我用这个代码更新了你的小提琴,请看一下谢谢!我怀疑它是在处理程序运行时在“this”或“arguments”上下文中传递的。谢谢!我怀疑它是在处理程序运行时在“this”或“arguments”上下文中传递的。