Extjs 5 + SearchField.js
Пробую прикрутить плагин http://dev.sencha.com/ext/5.0.1/exam...SearchField.js
Ввожу в строку поиска нажимаю поиск срабатывает лоадер и ничего не происходит, ошибка в консоли ![]() Фрагмент кода панели, где размещено поле поиска Ext.define('MyApp.view.Main', { extend: 'Ext.container.Viewport', alias: 'widget.main', requires: [ 'MyApp.view.MainViewModel', 'MyApp.view.MainViewController', 'Ext.view.View', 'Ext.XTemplate', 'Ext.form.Panel', 'Ext.form.FieldSet', 'Ext.form.field.Date', 'Ext.form.field.Time', 'Ext.button.Button', 'Ext.toolbar.Toolbar', 'Ext.toolbar.TextItem' ], controller: 'main', viewModel: { type: 'main' }, reference: 'main', itemId: 'myviewport', layout: 'border', defaultListenerScope: true, items: [ { xtype: 'panel', region: 'west', split: true, splitterResize: false, reference: 'leftPanel', autoScroll: true, itemId: 'mypanel', width: 270, collapsed: false, collapsible: true, title: 'OvAgro', titleCollapse: false, items: [ { xtype: 'dataview', autoScroll: true, margin: '10 0 10 10', disableSelection: false, itemSelector: 'div', itemTpl: [ '<table>', ' <tr>', ' <td width=\'200px\'><input type="checkbox" enabled="enabled" value="open" name="comment_status" <tpl if="active">checked="checked"</tpl> /><img src="http://{host}/avl_icon/get/{id}/18/any.png">{nm}</td>', ' <td class="configure"></td>', ' </tr> ', ' </table>', ' ' ], store: 'Object', listeners: { itemclick: { fn: 'onDataviewSelectConfigure', single: false }, select: 'onDataviewSelect' } }, { xtype: 'form', bodyPadding: 10, title: 'Отчет', items: [ { xtype: 'fieldset', title: 'От', items: [ { xtype: 'datefield', anchor: '100%', fieldLabel: 'Дата' }, { xtype: 'timefield', anchor: '100%', fieldLabel: 'Время', format: 'H:i', increment: 1, maxValue: '23:59', minValue: '00:00' } ] }, { xtype: 'fieldset', title: 'До', items: [ { xtype: 'datefield', anchor: '100%', fieldLabel: 'Дата' }, { xtype: 'timefield', anchor: '100%', fieldLabel: 'Время', format: 'H:i', increment: 1, maxValue: '23:59', minValue: '00:00' } ] }, { xtype: 'button', itemId: 'executeRep', margin: '0 0 0 70', text: 'Сформировать' } ] } ], dockedItems: [ { xtype: 'searchfield', store: 'Object', dock: 'top' } ] } Если еще что-то нужно по коду говорите, буду выкладывать. Возможно еще какие-нибудь параметры нужно указать для поля поиска? Спасибо! |
![]() |
Предположу...
Строка 058 store: Ext.data.StoreManager.lookup('Object') И подробнее почитать примеры http://docs.sencha.com/extjs/5.0/api...View-cfg-store |
Цитата:
|
Страница http://localhost/MyApp.model.Object не найдена.. "Копать" в сторону связи сторе с сервером. Нет?
P.S.: "Object" -- на мой взгляд не очень удачный вариант назвать сторе |
Код создания store:
Ext.define('MyApp.store.Object', { extend: 'Ext.data.Store', requires: [ 'MyApp.model.Object' ], constructor: function(cfg) { var me = this; cfg = cfg || {}; me.callParent([Ext.apply({ storeId: 'Object', batchUpdateMode: 'complete', model: 'MyApp.model.Object' }, cfg)]); } }); Есть еще идеи, вопрос актуален! |
requires: [ 'MyApp.model.Object' ], как вариант: ты подключаешь model но модель видимо не грузится, т.к. ее нет |
Цитата:
Ext.define('MyApp.model.Object', { extend: 'Ext.data.Model', requires: [ 'Ext.data.field.Integer', 'Ext.data.field.String' ], fields: [ { type: 'int', name: 'id', unique: true }, { type: 'string', name: 'nm' } ] }); |
хотя у тебя как то странно.. если бы модели не было, он тебе может и твою app не инициализировал (но не факт).
просто у тебя и модель грузится по адресу MyApp.model.Object и смотря на консоль в твоей ошибки и данные тянутся по тому же адресу. т.е. еще как вариант у тебя идет запрос на получение данных, а урла по которой ты хочешь получить эти данные не рабочая |
Цитата:
код модели начинается так: Ext.define('MyApp.model.Object', { |
Указал код модели выше, не то оказалось в буфере
|
я не увидел ни в сторе не в модели, где бы вы описывали proxy где в ней необходимо указать урлу для получения данных.
посмотрите как это делает sencha в своем примере: http://docs.sencha.com/extjs/4.2.2/#...Ext.data.Store я уверен что проблема именно в несуществующей урле, по которой нужно получать данные |
Цитата:
|
Цитата:
proxy: { type: 'ajax', url: 'Object' } теперь запрос имеет вид http://localhost/OvGps/OvClient/Obje...25&q uery=DAF Request Method:GET Status Code:200 OK Пишет [WARN] Unable to parse the JSON returned by the server В Response просто код модели. Ext.define('MyApp.model.Object', { extend: 'Ext.data.Model', requires: [ 'Ext.data.field.Integer', 'Ext.data.field.String' ], fields: [ { type: 'int', name: 'id', unique: true }, { type: 'string', name: 'nm' } ] }); |
Цитата:
|
выж писали что данные тянутся во view? так? по какой урле данные приходят в первый раз?
|
да, потом я их вставляю в store
for (var i=0; i<obj.items.length; i++){ storeObject.add({id: obj.items[i].id, nm: obj.items[i].nm}); } разве я их не из store должен потом доставать для поиска? По такому урлу я получаю данные и я указал в proxy: proxy: { type: 'ajax', url: 'http://localhost:3000/wialoncollector/items/'+Ext.util.Cookies.get("ssid") } Далее ошибка: ![]() |
стора сама все делает. вы подгрузили данные она сама их в view вставила
|
Давайте еще раз. Я обратился на сервер по такому урлу http://localhost:3000/wialoncollector/items/'+Ext.util.Cookies.get("ssid"), сервер мне отдал json я распарсил засунул в store, вывожу во view из store. Теперь для поиска елементов и соотвественно вывода их во view, я должен опять слать запрос на сервер для получения данных? Нельзя из store брать как-то то что ищу? И что по ошибке скажете что выше?
|
Цитата:
вот пример: http://docs.sencha.com/extjs/4.2.2/e...id/paging.html смотрим сам код (правда архитектура там другая, все в одной куче): http://docs.sencha.com/extjs/4.2.2/e...grid/paging.js есть грид: var grid = Ext.create('Ext.grid.Panel', { ... у него прописывается стора: ... store: store, ... эта стора объявляется так: var store = Ext.create('Ext.data.Store', { pageSize: 50, ... где у него куча свойств: pageSize: 50 - кол-во записей на странице sorters: [{ property: 'lastpost', direction: 'DESC' }] сортировка по умолчанию. т.д. и есть прокся: proxy: { type: 'jsonp', url: 'http://www.sencha.com/forum/topics-browse-remote.php', reader: { root: 'topics', totalProperty: 'totalCount' }, simpleSortMode: true }, type - тип данных, которые приходят с сервера, здесь jsonp - т.к. запрос кроссдоменный. в вашем случае я думаю хватит json url - урла по которой store дернет вашу урлу, для получения данных root - корень в json откуда надо брать данные totalProperty - кол-во записей стора которой достала и т.д. вы можете в документации почитать все свойства, которые можно задавать модель соответственно задает структуру данных, поля которые буду использоваться: 'title', 'forumtitle', 'forumid', 'username', еще можно указать тип данных: {name: 'replycount', type: 'int'}, вот урла, стора которую дергает: http://www.sencha.com/forum/topics-browse-remote.php пройдите по урле и посмотрите что там находится |
я вам упростил тот самый пример:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Paging Grid Example</title> <link rel="stylesheet" type="text/css" href="http://docs.sencha.com/extjs/4.2.2/extjs-build/resources/css/ext-all-neptune-debug.css" /> <script type="text/javascript" src="http://docs.sencha.com/extjs/4.2.2/extjs-build/ext-all.js"></script> <script type="text/javascript"> Ext.onReady(function(){ Ext.tip.QuickTipManager.init(); Ext.define('ForumThread', { extend: 'Ext.data.Model', fields: [ 'title', 'forumtitle', 'forumid', 'username', {name: 'replycount', type: 'int'}, {name: 'lastpost', mapping: 'lastpost', type: 'date', dateFormat: 'timestamp'}, 'lastposter', 'excerpt', 'threadid' ], idProperty: 'threadid' }); // create the Data Store var store = Ext.create('Ext.data.Store', { pageSize: 50, model: 'ForumThread', remoteSort: true, proxy: { // load using script tags for cross domain, if the data in on the same domain as // this page, an HttpProxy would be better type: 'jsonp', url: 'http://www.sencha.com/forum/topics-browse-remote.php', reader: { root: 'topics', totalProperty: 'totalCount' }, // sends single sort as multi parameter simpleSortMode: true }, autoLoad: true }); var grid = Ext.create('Ext.grid.Panel', { width: 700, height: 500, title: 'ExtJS.com - Browse Forums', store: store, columns:[{ id: 'topic', text: "Topic", dataIndex: 'title', flex: 1, sortable: false },{ text: "Author", dataIndex: 'username', width: 100 },{ text: "Replies", dataIndex: 'replycount', width: 70, align: 'right', sortable: true }], renderTo: Ext.getBody() }); }); </script> </head> <body> </body> </html> |
Часовой пояс GMT +3, время: 16:08. |