好的,我们正在进行一个项目,今天就要通过了。但我有一个问题。 这是示例代码:
output.js
var MapPrintDialog = Class.create();
MapPrintDialog.prototype = {
// 他の画面からテンプレート情報を更新するために呼ばれる。
comboReload : function() {
var val = tempComb.getValue();
tempComb.store.load({
callback: function(result, o) {
if (this.store.data.keys.indexOf(val) == -1) {
this.setValue(this.store.data.keys[0]);
this.fireEvent("select", this);
}
}.createDelegate(tempComb)
});
},
initialize : function(){
this.define();
},
define : function(){
var DrawPrintAreaFrame = function(mode, noUpdateStatusBarText){
var cs = getCurrentSetting();
if (mode == "init" || mode == "edit"){
PrintController.DrawMapPrintArea(cs.center.x, cs.center.y, cs.scale, cs.result.PrintMaps[0].Width, cs.result.PrintMaps[0].Height, cs.result.PageRowCount, cs.result.PageColumnCount, mode);
}
else if (mode == "delete"){
PrintFrameManager.ClearPrintFrame();
}
if (noUpdateStatusBarText) {
gisapp.noUpdateStatusBarText = true;
}
gisapp.refreshMap();
}
}
现在我的问题是,如何从另一个js文件调用“DrawPrintAreaFrame”?
我试过了:
MapPrintDialog.prototype.define().DrawPrintAreaFrame("edit");
MapPrintDialog.prototype.define.DrawPrintAreaFrame("edit");
MapPrintDialog.define().DrawPrintAreaFrame("edit");
MapPrintDialog.define.DrawPrintAreaFrame("edit");
MapPrintDialog.DrawPrintAreaFrame("edit");
DrawPrintAreaFrame("edit");
但它给了我一个错误大声笑。我该如何解决这个问题?请不要太苛刻,我刚开始学习javascript但是他们给了我一个不是真正“初学者”友好的高级项目XD
编辑----------------------
好的,现在我试着像这样修改它:
var MapPrintDialog = Class.create();
MapPrintDialog.prototype = {
// 他の画面からテンプレート情報を更新するために呼ばれる。
comboReload : function() {
var val = tempComb.getValue();
tempComb.store.load({
callback: function(result, o) {
if (this.store.data.keys.indexOf(val) == -1) {
this.setValue(this.store.data.keys[0]);
this.fireEvent("select", this);
}
}.createDelegate(tempComb)
});
},
initialize : function(){
this.DrawPrintAreaFrame("edit");
}
}
function DrawPrintAreaFrame(mode, noUpdateStatusBarText){
var cs = gisapp.getCurrentView();
if (mode == "init" || mode == "edit"){
PrintController.DrawMapPrintArea(cs.center.x, cs.center.y, cs.scale, cs.result.PrintMaps[0].Width, cs.result.PrintMaps[0].Height, cs.result.PageRowCount, cs.result.PageColumnCount, mode);
}
else if (mode == "delete"){
PrintFrameManager.ClearPrintFrame();
}
if (noUpdateStatusBarText) {
gisapp.noUpdateStatusBarText = true;
}
gisapp.refreshMap();
}
但它给了我: Javascript运行时错误:对象不支持属性或方法'DrawPrintAreaFrame'
答案 0 :(得分:0)
你有两种不同的方式:
1 - 你必须先改变它:
define : function(){
var DrawPrintAreaFrame = function(mode, noUpdateStatusBarText){
//You function code
}
this.getDrawPrintAreaFrame = function(){
return DrawPrintAreaFrame;
}
}
然后使用您的类创建您的对象:
var obj = new MapPrintDialog();
obj.define();
obj.getDrawPrintAreaFrame().call(obj, "edit");
2 - 删除define方法并将您的函数添加到原型中:
MapPrintDialog.prototype.DrawPrintAreaFrame = function(){
//your function code
}
创建您的对象并简单地调用您的方法:
var obj = new MapPrintDialog();
obj.DrawPrintAreaFrame("edit");
这很有趣,因为我说你有两种方式,第三种方式刚出现:
3 - 就使用Prototype
框架而言,您可以使用MapPrintDialog.addMethods
,这可用于向您的班级添加新的实例方法,删除您的{ {1}}和define
函数并添加以下内容:
DrawPrintAreaFrame
或者即使不删除您的方法,您也可以使用它:
MapPrintDialog.addMethods({
DrawPrintAreaFrame: function DrawPrintAreaFrame(){
//your code
}
});
并创建您的实例并调用方法:
define : function(){
var DrawPrintAreaFrame = function(mode, noUpdateStatusBarText){
//You function code
}
MapPrintDialog.addMethods({ DrawPrintAreaFrame: DrawPrintAreaFrame });
}
如果你需要你的函数就像一种静态方法,而不需要创建一个实例,那么试试这个:
var obj = new MapPrintDialog();
obj.DrawPrintAreaFrame("edit");
并像这样称呼它
MapPrintDialog.DrawPrintAreaFrame = function(){
//You function code
}
如果要在运行时定义它,请将整个定义添加到define方法中,如下所示:
MapPrintDialog.DrawPrintAreaFrame("edit");