2015-11-27 2 views
0

Я заметил, что если я установил defaultValue для модели в ExtJS, это оценивается только один раз. Проблема в том, я бы что-то вроде этогоМодель defaultValue оценивается только один раз в ExtJS. Есть ли способ оценить его при записи вставки?

Ext.define("AnalysisModel",{ 
    extend: "Ext.data.Model", 
    fields: [ 
     { 
      name: "date", 
      type: "date", 
      defaultValue: new Date(), 
     } 
    ], 
}); 

Каждый раз, когда я запись вставляется в магазин, который использует эту модель, я ожидаю, что date будет дата введения. Наоборот, new Date() оценивается только один раз, и все записи имеют одинаковое значение для date. Поэтому я должен явно вставить также date.

Есть ли способ обойти это? Я использую ExtJS 5.1

+0

«Я ожидаю, что эта дата будет датой вставки». Почему это так? Как предполагается, что структура должна знать, что вы означали 'new Date()' в отличие от некоторого статического значения даты? В настоящее время нет никакого способа сделать это. Вы можете использовать метод конвертации. –

+0

@EvanTrimboli: так оно работает в базе данных. 'convert' не работает. –

+0

Ну, если ваша база данных устанавливает его, просто пропустите значение по умолчанию и оставьте его нулевым. –

ответ

1

defaultValue: new Date() оценивается, когда модель определена; это часть аргументов для вызова Ext.define(). Вот почему его оценивают только один раз.

Что вам нужно сделать, это оценить значение по умолчанию позже - например. когда модель оценивается. Самый простой способ сделать это для модели - использовать метод convert.

{ name: "date", type: "date", 
    convert: function(value, record) { 
    if (value) { return value; } 
    return new Date(); 
    } 
} 

NB: не проверял это, но он должен работать.

+0

Я уже пробовал, но он не работает. Извините, я должен упомянуть об этом –

+0

@MarcoSulla Ну, [этот ответ действительно работает в основной скрипке] (https://fiddle.sencha.com/#fiddle/11p3), поэтому этот ответ решает ваш первоначальный вопрос. Вы можете попытаться понять, что происходит в скрипке, и если вам нужна помощь, чтобы заставить ее работать в вашей программе, вы хотели бы опубликовать больше своего кода. – Alexander

+0

Скрипка работает, ответа нет. Проблема заключается в 'defaultValue'. Если вы его удалите, код будет работать. Я принимаю ответ, если вы его исправите :) –