Не удается получить итерацию "Тема" в приложении Rally (2.0RC3)
Я изменяю приложение IterationSummary из 2.0RC3 SDK и добавляю в него дополнительную информацию об итерации. По какой-то причине я не могу получить "Тему" для итерации, хотя я могу запрашивать другие поля из объекта итерации. Начиная с примера, я просто добавил следующие строки @192
{
cls: 'theme',
html: iteration.get('Theme')
},
Я могу получить "Имя", но не могу получить значение "Тема", даже если оно четко установлено на итерации, и я проверил это значение с помощью API REST для запроса той же итерации. И запрос других полей, таких как "Имя", работает хорошо. Любая идея, почему "Тема" не возвращается?
1 ответ
Вы выбираете "Тема"?
Вы можете увидеть общий пример, который строит сетку итераций, которые попадают в релиз (выбранный в выпуске comboobox), в котором столбец Тема заполнен, если в итерации есть тема, введенная в этом репозитории github.
Этот пример отличается от приложения IterationSummary, потому что в моем примере я явно создаю Rally.data.wsapi.Store для объекта Iteration и выбираю Theme.
Настройка приложения IterationSummary все еще потребует явной выборки поля Theme, но вы правы, что из приложения IterationSummary не очевидно, как выбираются другие поля, например, состояние итерации. Объект итерации в этом приложении возвращается из this.getContext().getTimeboxScope().getRecord()
и если вы распечатаете этот объект в консоли, тема будет пустой. Поля, которые существуют на this.getContext().getTimeboxScope().getRecord()
ограничены и не могут быть настроены по соображениям производительности.
Чтобы модифицировать это приложение для отображения Темы, необходимо обратиться к модели Итерации и явно выбрать тему. Вот шаги, которые я предпринял, чтобы изменить приложение:
добавлена функция getTheme:
getTheme: function(){
var iteration = this.getContext().getTimeboxScope().getRecord();
return iteration.self.load(iteration.getId(), {
fetch: ['Theme']
});
}
В RC3 каждый раз, когда у нас есть запись, .self
даст свою модель, поэтому нет необходимости делать это вручную:
Rally.data.ModelFactory.getModel({
type: 'Iteration',
//...
Заметка fetch: ['Theme']
Далее внутри _addContent
метод getTheme()
называется
return Deft.Promise.all([this.getTheme(), this.calculateTimeboxInfo()]).then({
success: function(results) {
var theme = results[0].get('Theme');
и, наконец, значение переменной темы передается:
{
cls: 'theme',
html: theme
}
Полный код доступен в этом репозитории github.