2011-12-19 2 views
1

Привет, ребята, я надеюсь, что кто-то может мне помочь с этим, я действительно застрял, хотя на этот вопрос уже есть какой-то проклятый новичок, и я заверяю вас, что я прочитал весь ответ Сообщения, но все же не могут заставить его работать.Sencha Touch 1.1.1 вложенная загрузка JSON Store

Я использую Sencha Touch 1.1.1 и пытаюсь загрузить этот магазин с вложенными данными JSON. Вот код:

Ext.regModel("UserData", { 

     hasMany : [{ 
      name : "id", 
      type : "integer", 
     },{ 
      name : "username", 
      type : "string", 
     },{ 
      name : "password", 
      type : "string", 
     }] 

    }); 

    var userdata = 
     {"users": [ 
        { 
         "id": 16, 
         "username": "[email protected]", 
         "password": "bla", 
        }, { 
         "id": 17, 
         "username": "[email protected]", 
         "password": "bla", 
        } 
       ] 
     }; 


    var myStore = new Ext.data.Store({ 

     model : 'UserData', 
     data : userdata, 
     proxy : { 
      type : 'ajax',    

      reader : { 
       type : 'json', 
       root : 'users'  // not working   
      } 
     } 

    }); 

    var myList = new Ext.List ({ 

     fullscreen : true, 
     store : myStore, 
     grouped : false, 
     itemTpl : '<div>{username}</div>' 

    }); 

Возврат Неоткрытый тип Ошибка: список аргументов имеет неправильный тип. Когда я переписываю JSON с внешней оболочкой Array, он работает, но с неправильным корнем (а не с пользователями) я определенно видел примеры, где это работало с значением root: ''.

var userdata = 
    [ {"users": [ 
       { 
        "id": 16, 
        "username": "[email protected]", 
        "password": "bla", 
       }, { 
        "id": 17, 
        "username": "[email protected]", 
        "password": "bla", 
       } 
      ] 
    } ]; 

Что мне не хватает?

ответ

0

Если я не ошибаюсь, в вашей модели «UserData» это должно быть fields вместо hasMany.

И попробуйте поместить ваши данные json в отдельный файл json и найти путь в прокси-сервере вашего магазина.

var myStore = new Ext.data.Store({ 
model: 'UserData', 
autoLoad: true, 
proxy: { 
    type: 'ajax', 
    url: 'test.json', 
    reader: { 
     type: 'json', 
     root: 'users' 
    } 
} 
}); 

Я тестировал его, и он отлично работает здесь. Вот мой полный код.

Ext.regModel("UserData", { 

    fields: [ 
      {name: 'id', type:'int'}, 
      {name: 'username', type:'string'}, 
      {name: 'password', type:'string'} 

    ] 
}); 


var myStore = new Ext.data.Store({ 
    model: 'UserData', 
    autoLoad: true, 
    proxy: { 
     type: 'ajax', 
     url: 'test.json', 
     reader: { 
      type: 'json', 
      root: 'users' 
     } 
    } 
}); 


var app = new Ext.Application({ 
    name: 'TestApp', 
    useLoadMask: true, 
    launch: function() { 


     TestApp.views.listToolbar = new Ext.Toolbar({ 
      title: 'Foo Bar', 
      layout: 'hbox' 
     }); 

     TestApp.views.list = new Ext.List({ 
      id: 'list', 
      store: myStore, 
      emptyText: 'Nothing', 
      itemTpl: '<div class="username">{username}</div>', 
     }); 

     TestApp.views.container = new Ext.Panel({ 
      layout: 'fit', 
      html: 'this is the container', 
      dockedItems: [TestApp.views.listToolbar], 
      items: [TestApp.views.list] 
     }); 

     TestApp.views.viewport = new Ext.Panel({ 
      fullscreen: true, 
      layout: 'card', 
      cardAnimation: 'slide', 
      items: [ 
       TestApp.views.container 
      ] 
     }); 
    } 
}); 
+0

Ах, спасибо большое, сейчас работает как очарование. Просто из любопытства, вы знаете, почему я не могу поместить строку JSON в переменную и передать ее в магазин? Магазин данных Sencha кажется для меня большой загадкой. – user1106418

+0

Вы можете поместить строку JSON в переменную. Но поскольку ваш корень является 'users', ваша переменная должна быть' var mydata = [{"id": 16, "username": "blah", "password": "spamme1992"}, {"id": 17, " имя пользователя ":" xxx "," password ":" yyy "}];' –

+0

А, хорошо, ваша помощь очень ценится. – user1106418