2015-02-28 1 views
0

У меня есть сетка, которую я заполняю, добавляя элементы в магазин или получая уже существующие элементы на сервере. Это то, что происходит:Есть ли способ переименовать в модели автоматически созданное свойство «id»?

1-users adds new items to the grid by gui. 
2-users can send new items to the server by pressing a "send" button. 

Каждый элемент имеет свойство «ID», во всяком случае для вновь создаваемых элементов ид всегда 0, в то время как для существующего (т.е. посылается сервером.) Идентификаторы различны.

Это приводит к следующему сценарию: при добавлении нового элемента extjs принимает его, только если нет другого элемента с тем же идентификатором ... и в моем случае это проблема, так как может быть несколько строк с одинаковыми id (0)!

Есть ли способ решить эту проблему? Есть ли способ, чтобы extjs вызывали свое свойство id как по-другому, так что он не противоречил моему свойству id?

редактировать:

частично решена путем установки значения idProperty в модели на другое поле:

idProperty: extid 

все равно, что меня беспокоит то, что если я делаю

store.getAt(i).getData() 

I все равно получите это свойство «extid» в результате json ... Я не хочу отправлять это поле на свой сервер.

+0

Что вы используете для отправки данных на сервер из своего магазина? Например, у вас есть сценарий? – mindparse

+0

Нет, я просто вызываю Ext.Ajax, передавая данные моей модели с помощью getData() – Phate

ответ

2

Должно быть недоразумение, когда вы говорите when adding a new item extjs accepts it just if there is no other item with the same id...and in my case this is a problem as there can be multiple rows with the same id.

В ExtJs вновь созданные строки всегда имеют нулевое значение id. Это по дизайну. И теперь проблема имеет более одной строки с id=0. Строки с id = 0 обрабатываются ExtJs как строки, которые еще не сохранены на сервере.

Как работает любая база данных, автоматически созданная id новой строки определяется в тот момент, когда вы вставляете эту строку в базу данных. ExtJs ожидает, что столбец id в вашей таблице является автоинкрементным идентификатором, и, как таковой, он ожидает, что сервер отправит эту строку с уже определенным идентификатором обратно клиенту.

Вот как работает ваш бэкэнд. Если этого не произойдет, у вас будет трудное время, чтобы заставить его работать вместе с ExtJs. Мы не просим вас изменять поведение вашего сервера. ExtJs требует, чтобы сервер работал должным образом.

0

Не назначайте идентификаторы для новых элементов. Ext отмечает такие записи, как фантомы, и отправляет их на сервер в качестве новых добавленных записей. Сервер назначает идентификаторы и отправляет их обратно в Ext. Ext назначает эти созданные сервером идентификаторы, и записи больше не новы.

+0

Это не ответ ... вы просите меня изменить поведение сервера (id = 0 -> новая запись) – Phate

+1

Это ** ** ответ. ExtJs требует некоторого поведения от сервера. –