这是我第一次完成这项任务。我需要根据字段更新我的UI。该字段可以是不同类型的。这里我只是检查备忘录或布尔类型。
// UI Field Rule set.
var UIFieldRules = {
isMemo: function() {
return this.DataType === DataTypeKVP("Memo");
},
isBoolean: function() {
return this.DataType === DataTypeKVP("Boolean");
},
MapToList: function() {
if (UIFieldRules.isMemo.call(this) || UIFieldRules.isBoolean.call(this)) {
console.log("memo or bool");
console.log(UIFieldRules.isMemo.call(this));
console.log(this);
MAPTOLIST_SELECTOR.prop('disabled', true);
return;
} else {
MAPTOLIST_SELECTOR.prop('disabled', false);
console.log("UI field rules found memo");
}
}
};
然后我在加载所有字段时调用此对象。
UIFieldRules.MapToList.call(field);
这很好,并且完成了任务,但现在我需要对字段应用更多规则。 (如果你之前听过这个,请阻止我)
我如何才能获得此设置,我可以将规则添加到集合中并将它们全部动态应用于 javascript ?
更新提供示例:
function MapToList(field){
isBoolean:function(){}
isMemo : function(){}
execute : function(){
if (UIFieldRules.isMemo.call(this) || UIFieldRules.isBoolean.call(this)) {
console.log("memo or bool");
console.log(UIFieldRules.isMemo.call(this));
console.log(this);
MAPTOLIST_SELECTOR.prop('disabled', true);
return;
} else {
MAPTOLIST_SELECTOR.prop('disabled', false);
console.log("UI field rules found memo");
}
}
}
然后,如果我想创建更多规则(我这样做),我应该创建另一个像上面那样的对象吗?在JS中有这样做的最佳实践方法吗?
var rules = [];
rules.push(new MapToList(field));
rules.push(new RegExEnabled(field));
$.each(rules,function(item){
item.execute();
});
答案 0 :(得分:1)
您的示例方法完全没问题。创建所有实现相同接口的多个对象,将它们放在列表中,然后在每个对象上调用一个公共方法:
var rules = [MapToList, RegExEnabled];
rules.forEach(function(item){
item.execute(field);
});
但是,您可能需要注意,如果您的对象没有状态或没有任何参数化,通常您不需要构造函数+ new
,简单的对象文字就足够了。
同样,如果您的共享界面归结为单个execute
方法,那么您实际需要的不是对象列表,而只是您可以调用的函数列表。 It's not Java: - )