2013-07-30 1 views
2

Я хочу отображать прогностический текст в поле поиска, значение для интеллектуального текста, поступающего с сервера. Вот мой код до сих пор:Не получать значение поиска в Sencha Touch с помощью searchfield

Вид:

Ext.define('MyApp.view.AutoSearch', { 
    extend: 'Ext.dataview.List', 
    alias : 'widget.mainPanel', 

    config: { 
    store : 'AutoSearchStore', 



    itemTpl: '<div class="myWord">'+ 
     '<div>Word is --<b>{name}</b>--- after search!!!</div>' + 
     '</div>', 

    emptyText: '<div class="myWord">No Matching Words</div>', 

    items: [ 
       { 
        xtype: 'toolbar', 
        docked: 'top', 

        items: [ 
         { 
          xtype: 'searchfield', 
          placeHolder: 'Search...', 
          itemId: 'searchBox' 
         } 
        ] 
       } 
      ] 

    } 
}); 

Магазин:

Ext.define('MyApp.store.AutoSearchStore',{ 
extend: 'Ext.data.Store', 

config: 
{ 
    model: 'MyApp.model.AutoSearchModel', 
    autoLoad:true, 
    id:'Contacts', 
    proxy: 
    { 
     type: 'ajax', 
     url: 'http://alucio.com.np/trunk/dev/sillydic/admin/api/word/categories/SDSILLYTOKEN/650773253e7f157a93c53d47a866204dedc7c363', 

     reader: 
     { 
       rootProperty:'' 
     } 
    } 
} 
}); 

Модель:

Ext.define('MyApp.model.AutoSearchModel', { 
    extend: 'Ext.data.Model', 
    requires: ['MyApp.model.AutoSearchModelMenu'], 
    config: { 
     fields: [ 
     {name:'data', mapping: 'data'}, 
     {name: 'name'}, 
     ],  
    }, 
}); 

и

Ext.define('MyApp.model.AutoSearchModelMenu', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 
      'name', 
     ], 
     belongsTo: "MyApp.model.AutoSearchModel" 
    } 
}); 

Контроллер:

Ext.define('MyApp.controller.SearchAutoComplete', { 
extend : 'Ext.app.Controller', 

config: { 
    profile: Ext.os.deviceType.toLowerCase(), 
    stores : ['MyApp.store.AutoSearchStore'], 
    models : ['MyApp.model.AutoSearchModel'], 
    refs: { 
    myContainer: 'mainPanel' 
    }, 
    control: { 
    'mainPanel': { 
    activate: 'onActivate' 
    }, 
    'mainPanel searchfield[itemId=searchBox]' : { 
    clearicontap : 'onClearSearch', 
    keyup: 'onSearchKeyUp' 
    } 
    } 

}, 

onActivate: function() { 
    console.log('Main container is active--Search'); 
}, 

onSearchKeyUp: function(searchField) { 
    queryString = searchField.getValue(); 
    console.log(this,'Please search by: ' + queryString); 

    var store = Ext.getStore('AutoSearchStore'); 
    store.clearFilter(); 

    if(queryString){ 
    var thisRegEx = new RegExp(queryString, "i"); 
    store.filterBy(function(record) { 
    if (thisRegEx.test(record.get('name'))) { 
    return true; 
    }; 
    return false; 
    }); 
    } 

}, 

onClearSearch: function() { 
    console.log('Clear icon is tapped'); 
    var store = Ext.getStore('AutoSearchStore'); 
    store.clearFilter(); 
}, 

init: function() { 
    console.log('Controller initialized for SearchAutoComplete'); 
} 

}); 

Json данных выглядит следующим образом:

"data":[ 
{ 
    "name":"paint", 
    "author":"admin", 
    "word_id":"1", 
    "category":"Business", 
    "is_favourite":"yesStar" 
}, 
{ 
    "name":"abacus", 
    "author":"admin", 
    "word_id":"2", 
    "category":"Education", 
    "is_favourite":"yesStar" 
}, 
{ 
    "name":"abate", 
    "author":"admin", 
    "word_id":"3", 
    "category":"Education", 
    "is_favourite":"noStar" 
}, 
{ 
    "name":"testing adsf", 
    "author":"admin", 
    "word_id":"7", 
    "category":"Education", 
    "is_favourite":"noStar" 
}, 
{ 
    "name":"sprite", 
    "author":"admin", 
    "word_id":"6", 
    "category":"Business", 
    "is_favourite":"noStar" 
}, 
{ 
    "name":"newword", 
    "author":"admin", 
    "word_id":"8", 
    "category":"Architecture", 
    "is_favourite":"noStar" 
} 
] 
}) 

Если я типа "А", то он отображает No Matching Words, но у меня есть слова от "А" на json, идущем с сервера. Как решить эту проблему?

Любая идея!

Источники Код Link

+0

Вашего кода не в лучшей форме: читатель магазина не установлен (JSON, корень: «данные»). Модель отображает данные в данные, хотя данных нет, но вместо этого они должны иметь «имя», «автор», «слово_ид», ... Почему две модели? В контроллере вы устанавливаете глобальные vars - нет. Можете ли вы сказать нам, где вы застряли? Загружен ли магазин? Отображается ли в списке что-нибудь? – Dinkheller

ответ

1

Я не знаю, почему вы используете две модели, но только одна вещь, которую нужно указать в AutoSearchStore:

reader: 
     { 
       rootProperty:'data' 
     } 

вместо

reader: 
     { 
       rootProperty:'' 
     } 

в получить ожидаемые результаты в списке.

Надеется, что это будет полезно :)

Смежные вопросы