2012-09-27 68 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