Ember.js 您能将observes()与{{yield}一起使用吗

Ember.js 您能将observes()与{{yield}一起使用吗,ember.js,handlebars.js,Ember.js,Handlebars.js,我想定义这样一个函数(在本例中为组件): 其中,部件把手文件基本上可以是: ... {{yield}} ... 这能满足我的要求吗?也就是说,当收益率值发生变化时,是否会调用doSomething()函数?U应为此使用一个参数,而不是收益率内容!比如: 从模板中调用此选项: {{tool-tip value=myValue"}} 以及控制器: myValue: function() { return 'Hi %@, welcome to %@'.fmt(this.get('val1'),

我想定义这样一个函数(在本例中为组件):

其中,部件把手文件基本上可以是:

...
{{yield}}
...

这能满足我的要求吗?也就是说,当收益率值发生变化时,是否会调用doSomething()函数?

U应为此使用一个参数,而不是收益率内容!比如:

从模板中调用此选项:

{{tool-tip value=myValue"}}
以及控制器:

myValue: function() {
  return 'Hi %@, welcome to %@'.fmt(this.get('val1'), this.get('val2'));
}.property('val1', 'val2');
而不是您可能想要使用的解决方案:

{{tool-tip}}
  Hi {{val1}}, welcome to {{val2}}
{{tool-tip}}

让我解释一下你的想法存在的问题:

{{yield}}所在的地方是一个模板。你可以观察模板,但模板本身永远不会改变。该模板是一个编译的把手模板

因此,甚至不再有字符串
Hi{{val1}},欢迎来到{{val2}}
,但是有一个编译版本。所以,一个javascript函数将生成
Hi Krutius,欢迎使用StackOverflow
,如果您使用JSON调用它{val1:“Krutius”,val2:“StackOverflow”}

你看,这个函数永远是一样的

所以你有两个问题:

  • 第一种方法是获取结果HTML,您需要将其插入包含内容的工具提示的
    title
    属性中,或者将
    tooltip()
    函数作为
    模板
    属性。这很棘手。一个有效的解决方案是仍然在隐藏标记中使用
    {{yield}
    ,抓取html并将其放入工具提示中。这将起作用(只要值不变),但肯定是一个肮脏的解决方案。我想你可能已经这样做了,这就是为什么你想观察
    {{yield}
    。 但重要的是要知道,该视图不会重播!对于每个值,都会创建一个视图,并在DOM中插入一些奇怪的
    标记,然后将一个观察者附加到该单个值,当该值更改时,可以通过
    标记找到DOM中的特定位置,该值将被更新。 这种行为将在将来出现HTMLBars时发生变化。所以你不能依赖它。也许更好的工作方式是自己调用handlebar函数来获取html

  • 但是你还有另一个问题。车把功能的结果何时改变?为此,您需要知道生成的handlebars函数需要什么属性。您可能可以通过分析它来做到这一点,但可能函数与HTMLBAR不同?而且它需要对ember呈现HTML的内部方式进行大量的黑客攻击



所以,总的来说,不要这样做。通过给组件一个值来解决这个问题,然后自己为这个值呈现HTML

这是行不通的,因为收益率不是一个值!yield是子模板的占位符。甚至不清楚你期望什么。你能指定你的需要吗?我想做的是创建我自己的组件,将一些东西封装在引导工具提示div中。我相信,引导使你在每次工具提示值更改时运行一些javascript来更新页面上的内容。我打算在组件中完成这项工作。我想我实际上可以通过观察产权属性来做到这一点,所以这个问题可能并不重要。
{{tool-tip}}
  Hi {{val1}}, welcome to {{val2}}
{{tool-tip}}