我正在扩展dojo的dojox.data.JsonRestStore,我想提供自己的固定方案。 这是getUsername将无法工作,因为它不引用当前数据存储区 看看这段代码:
/**
* @author user
*/
dojo.provide("cms.user.UserAuthenticationStore");
dojo.require("dojox.data.JsonRestStore");
dojo.declare("cms.user.UserAuthenticationStore", [dojox.data.JsonRestStore], {
schema: {
prototype: {
getUsername: function(){
return ???.getValue(this, "username");
}
}
}
});
你能告诉我要替换什么???与?
编辑:
这是有效的代码,但它很难看,有人能告诉我如何解决这个问题吗?
/**
* @author user
*/
dojo.provide("cms.user.UserAuthenticationStore");
dojo.require("dojox.data.JsonRestStore");
dojo.declare("cms.user.UserAuthenticationStore", [dojox.data.JsonRestStore], {
schema: {
prototype: {}
},
constructor: function(){
var that = this;
this.schema.prototype.getUsername = function(){
return that.getValue(this, "username");
}
}
});
答案 0 :(得分:1)
而不是:
this.schema.prototype.getUsername = function() {
return ???.getValue(this, "username");
}
您可以尝试:
this.schema.prototype.getUsername = dojo.hitch(this, "getValue", <this>, "username");
其中“<this>
”是用作getValue函数的第一个参数的变量。否则,您的“that
”并不太难看,但人们通常将其称为“self
”或其他内容。
编辑:
也许这会奏效吗?创建新架构的快速而肮脏的方式。否则,您可能希望创建另一个分别定义自己的方案的组件。然后你可以创建一个“new MySChema()”作为“schema”var。
dojo.declare("cms.user.UserAuthenticationStore", [dojox.data.JsonRestStore], {
self: this,
schema: new (function() {
this.getUsername = function () { return self.getValue(this, "username"); }
}
})();
});
答案 1 :(得分:0)
这是正确的方法:
/**
* @author user
*/
dojo.provide("cms.user.UserAuthenticationStore");
dojo.require("dojox.data.JsonRestStore");
dojo.declare("cms.user.UserAuthenticationStore", [dojox.data.JsonRestStore], {
schema: {
prototype: {
store: null,
getUsername: function(){
return this.store.getValue(this, "username");
}
}
},
constructor: function(){
this.schema.prototype.store = this;
},
login: function(){
},
logout: function(){
}
});