2011-11-30 57 views
0

我已經閱讀了許多問題/答案和教程,但我仍然無法在Sencha Touch中實現分層模型。根模型是標籤。每個標籤都有很多項目。這裏是我的模型:如何在Sencha Touch中實現分層模型

根標籤:

app.models.Tag = Ext.regModel("Tag", { 
    fields : [ { 
     name : "id", 
     type : "int" 
    }, { 
     name : "name", 
     type : "string" 
    }], 
    associations : { 
     type : "hasMany", 
     model : "TagItem", 
     name : "items" 
    } 
}); 

Adjected TagItem

app.models.TagItem = Ext.regModel("TagItem", { 
    fields : [ { 
     name : "id", 
     type : "int" 
    }, { 
     name : "title", 
     type : "string" 
    }, { 
     name : "type", 
     type : "string" 
    }, { 
     name : "tag_id", 
     type : "int" 
    }], 
    associations : { 
     belongsTo : { 
      model : "Tag", 
      name : "items" 
     } 
    } 
}); 

TagStore:

app.stores.tagItems = new Ext.data.Store({ 
    model : "app.models.TagItem", 
    proxy : { 
     type : 'scripttag', 
     root : 'items', 
     url : 'http://www.s-lab.cz/ios/api/tags.php' 
    } 
}); 

標籤:

app.stores.tags = new Ext.data.Store({ 
    model : "app.models.TagItems", 
    proxy : { 
     type : 'scripttag', 
     url : 'http://www.s-lab.cz/ios/api/tags.php' 
    } 
}); 

當我試圖從商店加載項我得到:

遺漏的類型錯誤:無法調用方法的不確定

「讀」我的JSON是這樣的:

stcCallback1005([ 
{ 
    "id":1, 
    "name":"Doktor", 
    "url":"doktor", 
    "items":[ 
     { 
      "type":"video", 
      "id":1, 
      "title":"First tag item", 
      "tag_id":1 
     }, 
     { 
      "type":"article", 
      "id":1, 
      "title":"Second tag item - article", 
      "tag_id":1 
     }, 
     { 
      "type":"article", 
      "id":2, 
      "title":"Third tag item - article", 
      "tag_id":1 
     }, 
     { 
      "type":"video", 
      "id":2, 
      "title":"Fourth tag item", 
      "tag_id":1 
     } 
    ] 
}, 
{ 
    "id":2, 
    "name":"Nemocnice", 
    "url":"nemocnice" 
}, 
{ 
    "id":3, 
    "name":"Sestra", 
    "url":"sestra" 
    } 
    ]); 

更新:

我改變了代碼的建議和生成的JSON是這樣的:

stcCallback1005({ 
    "results": [{ 
     "id": 1, 
     "name": "Doktor", 
     "url": "doktor", 
     "items": [{ 
      "type": "video", 
      "id": 1, 
      "title": "First tag item", 
      "tag_id": 1 
     }, { 
      "type": "article", 
      "id": 1, 
      "title": "Second tag item - article", 
      "tag_id": 1 
     }, { 
      "type": "article", 
      "id": 2, 
      "title": "Third tag item - article", 
      "tag_id": 1 
     }, { 
      "type": "video", 
      "id": 2, 
      "title": "Fourth tag item", 
      "tag_id": 1 
     }] 
    }, { 
     "id": 2, 
     "name": "Nemocnice", 
     "url": "nemocnice" 
    }, { 
     "id": 3, 
     "name": "Sestra", 
     "url": "sestra" 
    }] 
}); 

而我依然無法訪問後續項目:app.stores.tags.getAt(0)作品,但app.stores.tags.getAt(0).TagItems()沒有(也不app.stores.tags.getAt(0).itemsapp.stores.tags.getAt(0).items()一樣)。而且我的模板不能正確渲染:<tpl for=".">{name}<ul><tpl for="items"><li>{title} ({type})</li></tpl></ul></tpl>

有什麼想法嗎?

回答

1

我認爲你不需要爲模型註冊指定一個變量。

Ext.regModel("Tag", { 
    fields : [ { 
     name : "id", 
     type : "int" 
    }, { 
     name : "name", 
     type : "string" 
    }], 
    associations : { 
     type : "hasMany", 
     model : "TagItem", 
     name : "items" 
    } 
}); 

所以;

Ext.regModel("TagItem", { 
    fields : [ { 
     name : "id", 
     type : "int" 
    }, { 
     name : "title", 
     type : "string" 
    }, { 
     name : "type", 
     type : "string" 
    }, { 
     name : "tag_id", 
     type : "int" 
    }], 
    associations : { 
     belongsTo : { 
      model : "Tag", 
      name : "items" 
     } 
    } 
}); 

添加讀者JSON和正確的註冊型號名稱。

TagStore:

app.stores.tagItems = new Ext.data.Store({ 
    model : "TagItem", //Use registered name 
    proxy : { 
     type : 'scripttag', 
     url : 'http://www.s-lab.cz/ios/api/tags.php' 

        reader: { //add reader to read from json 
         type: 'json', 
         root: 'results' 
        } 
    } 
}); 

標籤:

app.stores.tags = new Ext.data.Store({ 
    model : "Tag", //Use registered name 
    proxy : { 
     type : 'scripttag', 
     url : 'http://www.s-lab.cz/ios/api/tags.php' 
        reader: { //add reader to read from json 
         type: 'json', 
        root: 'results' 
        } 
    } 
}); 

最後,也許你需要改變你的tags.php JSON格式;

{"results":[ 
{ 
    "id":1, 
    "name":"Doktor", 
    "url":"doktor", 
    "items":[ 
     { 
      "type":"video", 
      "id":1, 
      "title":"First tag item", 
      "tag_id":1 
     }, 
     { 
      "type":"article", 
      "id":1, 
      "title":"Second tag item - article", 
      "tag_id":1 
     }, 
     { 
      "type":"article", 
      "id":2, 
      "title":"Third tag item - article", 
      "tag_id":1 
     }, 
     { 
      "type":"video", 
      "id":2, 
      "title":"Fourth tag item", 
      "tag_id":1 
     } 
    ] 
}, 
{ 
    "id":2, 
    "name":"Nemocnice", 
    "url":"nemocnice" 
}, 
{ 
    "id":3, 
    "name":"Sestra", 
    "url":"sestra" 
    } 
    ] 
} 

我希望它的工作原理或有助於糾正你的代碼。

+0

感謝您的回答。不幸的是它沒有幫助。查看更新的問題。 –

+0

您可以使用這些代碼提供一個有效的網址嗎? –

+0

不幸的不是。但是,這是一個GIT回購:https://bitbucket.org/tomasfejfar/3m –