gpt4 book ai didi

ruby-on-rails - Ember.js + Handlebars 自定义助手

转载 作者:行者123 更新时间:2023-12-03 16:03:43 24 4
gpt4 key购买 nike

我正在尝试在 Handlebars 中实现一个简单的条件语句,该语句根据 Controller 中的属性进行更改。

我设法想出了;

Handlebars.registerHelper("businessVerificationState", function(state, block) {
var value = Ember.getPath(this, "state");
if (value == state) {
return block(this);
}
});

App.businessController.business 指的是我创建的模型对象,“状态”是一个属性。下面是模板。
<script type="text/x-handlebars">
{{#with App.businessController.business}}
{{#exampleState "test1"}}
<p>Test 1</p>
{{/exampleState}}

{{#exampleState "test2"}}
<p>Test 2</p>
{{/exampleState}}
</script>

这一切都很顺利。除非我的模型属性发生变化。从 webkit 中的控制台 .. 如果我输入 ..

business.set("state", "test2");例如 - 没有任何变化。

如果我使用其他标准 Handlebars 语句,如 IF 或 UNLESS - 内容会根据我更新模型属性的时间而变化。

显然,我做错了什么,非常感谢任何帮助。

最佳答案

最简单的方法是让父 View 具有绑定(bind)到 Controller 值的属性,以及将状态名称指定为属性的 subview 。然后您可以定义一个 isVisible计算属性,它将根据它是否与父 View 中绑定(bind)的当前值匹配自动切换 subview 的可见性。

您的模板可能如下所示:

<script type="text/x-handlebars">
{{#view Ember.View currentStateBinding="App.businessController.business.state"}}
{{#view App.StateView stateName="test1"}}
<p>Test 1</p>
{{/view}}

{{#view App.StateView stateName="test2"}}
<p>Test 2</p>
{{/view}}
{{/view}}
</script>

还有你的 JS 代码:
var App = Ember.Application.create();

App.businessController = Ember.Object.create({
business: Ember.Object.create({
state: 'test1'
})
});

App.StateView = Ember.View.extend({
isVisible: function() {
return this.get('stateName') === this.getPath('parentView.currentState');
}.property('parentView.currentState')
});

这是一个有效的 jsFiddle 示例: http://jsfiddle.net/ebryn/QAxPU/

关于ruby-on-rails - Ember.js + Handlebars 自定义助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com