gpt4 book ai didi

ember.js - 在 View 中订阅模型事件的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 21:33:56 27 4
gpt4 key购买 nike

我想在我的 View 中订阅模型的变得无效和成为错误事件,以便我可以设置一些错误状态。我能想到两种方法,都有各自的缺点。

我能想到的第一种方法是使用观察者在 View 上创建我自己的becomeInvalid 和becomeError Hook :

becameInvalid: function() {
var isValid = this.get('controller.model.isValid');
if (Ember.isNone(isValid) || isValid) {
return;
}
console.log('becameInvalid');
}.observes('controller.model.isValid')

becameError: function() {
var isError = this.get('controller.model.isError');
if (Ember.isNone(isError) || !isError) {
return;
}
console.log('becameError');
}.observes('controller.model.isError')

这可行,但使用了大量样板代码。我能想到的第二种方法是在模型加载后向事件添加处理程序:

didLoad: function() {
var isLoaded = this.get('controller.model.isLoaded');
if (Ember.isNone(isLoaded) || !isLoaded) {
return;
}
var model = this.get('controller.model');
model.on('becameInvalid', function() {
console.log('becameInvalid');
});
model.on('becameError', function() {
console.log('becameError');
});
}.observes('controller.model.isLoaded')

这种方法的问题在于,它仍然需要一些样板代码,并且(如果我错了,请纠正我)当 View 被删除时,事件处理程序不会自动清理。

我想做的是类似于观察者协议(protocol)的事件,这些事件将由框架自动清理。例如:

becameInvalid: function() {
console.log('becameInvalid');
}.eventHandler('controller.model.becameInvalid')

becameError: function() {
console.log('becameError');
}.eventHandler('controller.model.becameError')

这样的事情存在吗?

最佳答案

我认为你的第一个建议是一个可行的解决方案。这是它的一个版本,稍微不那么冗长:

isValid : Ember.Computed.alias("controller.model.isValid"),
becameInvalid: function() {
if(this.get("isValid"){
return;
}
console.log('becameInvalid');
}.observes('isValid')

查看此question有关 Ember.compated.alias 的一些详细信息。除此之外,我发现在某些情况下(=当 isValid 变为 false 时)使用开箱即用的功能 Ember 不可能触发观察者。您必须自己实现这样的观察者。

关于ember.js - 在 View 中订阅模型事件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14881508/

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