Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 超载“;链接至;ember.js中的helper_Javascript_Jquery_Ember.js - Fatal编程技术网

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”上下文中传递的。