2012-09-27 39 views
1

嗨我有问题的JavaScript!我有main.js和Model.js。 Model.js是一个需要在main.js中访问其功能的javascript oop类,我该怎么做?我不断收到一个Model未定义的错误。这些工作是否需要工具或代码中的错误?javascript oop多个类

Model.js

Model = {}; 

Model.init = function() { 
    alert("model"); 
} 

Model.getList = function(){ 
var list; 
$.ajax(
    { 

    url:'???', 
    type: 'GET', 
    dataType: 'json', 

    success: function(data) 
    { 
    list=data; 
    } 
    error: function(data) 
    { 
    alert("error"); 
    } 
    }); 
    return list; 
} 

main.js

document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 

    var testins=new Model(); 
    var list=Model.getList(); 

    alert("result: "+testins); 
} 

我真的可以使用一些帮助。

所以我尝试了MrCode方法,并由于实验原因将代码放在一个文件中,因为main.js仍然无法访问Model.js文件。

main.js

document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 
    alert("aaa"); //first 

    var testins=new Model(); 
    var list=testins.getList(); 

    alert("result: "+testins); // third 

    alert("list"+list); //fourth 
    } 

    function Model() 
    { 
    this.init = function() 
    { 
     alert("Model"); 
    } 
    this.getList = function() 
    { 
     var list; 
     $.ajax(
      { 

      url:'??', 
      type: 'GET', 
      dataType: 'json', 

      success: function(data) 
      { 
      list=data; 
      alert("success"+list); //fifth 
      }, 
      error: function(data) 
      { 
      alert("error"); 
      } 
      }); 
     alert("success"+list); //second 
      return(list); 
    } 
    } 

但下面的提示,我看到的是阿贾克斯的$部分最后完成。

+0

你是什么意思“继警报我看到ajax最后完成”?您对ajax数据的警报是最后一次,因此将始终显示最后一次。该调用发生在“aaa”警报之后,但根据服务器的不同,可能会在一段时间后检索结果。 – MrCode

回答

2

function Model() { // this is the "constructor" 
} 

而更换

Model.init = function() { 

通过

​​

(与同为的GetList)

这将使

  • 您来电new Model()
  • init功能由你new Model()创建对象继承。

使用方法如下:

var testins=new Model(); // create an instance 
var list=testins.getList(); // call the instance method 

您可能感兴趣的this MDN document about prototype and inheritance

+0

按照你所说的做了,但是我发现错误“Web控制台(6382):Uncaught TypeError:无法调用未定义的方法'getList'在file:///asset/www/jquery/main.js:40 ” – HellOfACode

+0

你真的调用'testins.getList()'(而不是'Model.getList()')? –

+0

真的。我已经按顺序添加了脚本,所以主要是最后的,并且对model.js和main.js进行了更改,但仍然出现错误。 – HellOfACode

0
function Model() 
{ 
    // define public methods 
    this.init = function() 
    { 
     alert("Model"); 
    } 

    this.getList = function() 
    { 
     var list; 
     $.ajax(
      { 

      url:'???', 
      type: 'GET', 
      dataType: 'json', 

      success: function(data) 
      { 
      list=data; 
      } 
      error: function(data) 
      { 
      alert("error"); 
      } 
      }); 
      return list; 
    } 
} 

var testins = new Model(); // create an instance of Model() 
var list = testins.getList(); // call its method 
+0

试过你的方法,但我有问题,因为每次我尝试它$最后完成了.ajax所以列表为空 – HellOfACode

+0

听起来像是逻辑或ajax调用的问题,而不是OOP设计。发布您的更新代码,我会看看。 – MrCode