Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Binding: И снова проблема с формулами (https://javascript.ru/forum/extjs/63314-binding-i-snova-problema-s-formulami.html)

khusamov 31.05.2016 13:01

Binding: И снова проблема с формулами
 
При запуске приложения следующая формула не срабатывает, в итоге кнопка break активна (ее активность зависит от этой формулы):

breakButtonDisabled: function(get) {
	return !get("selectedGroupOrder") || get("stoped") && get("selectedGroupOrderStatus") != "complete";
},


Но если я уберу get("selectedGroupOrderStatus") != "complete", то формула при запуске приложения начинает работать:

breakButtonDisabled: function(get) {
	return !get("selectedGroupOrder") || get("stoped");
},


Почему так происходит и как сделать, чтобы она все-таки работала в первом случае?

https://www.sencha.com/forum/showthr...58#post1136258

khusamov 31.05.2016 13:04

Формула selectedGroupOrderStatus вычисляется следующим образом:

selectedGroupOrderStatus: function(get) {
	return get("selectedGroupOrder.status");
},
selectedGroupOrder: function(get) {
	return get("groupOrderList.selection");
},

khusamov 01.06.2016 07:44

Выкрутился. И знаете как? Блин, хреново. Вот как:

init: function() {
	var me = this;
	var vm = me.getViewModel();
	vm.set("selectedGroupOrderCompleted", null);
},


То есть, в контроллере вида, я просто инициализирую формулу (считая ее за переменную) любым значением кроме undefined. В итоге, формула при старте приложения срабатывает. И все что мне нужно делает.

В общем формулы сырые, с явными багами, либо я не знаю как ими пользоваться.

.

nohuhu 01.06.2016 20:33

Про формулы, binding и прочие MVM штуки лучше спрашивать сразу в сенчовом форуме. Там обитают человеки, которые эту фигню написали и знают от и до.

khusamov 01.06.2016 20:57

Я туда уже два поста закинул. Пока молчат.

khusamov 03.06.2016 19:01

Еще один вариант нашел как выкрутиться. Несколько лучше выглядит. Надо задать значение по умолчанию в самом компоненте. Например:

text: "Print Label",
handler: "printLabel",
disabled: true, // значение по умолчанию
bind: {
	disabled: "{printLabelButtonDisabled}"
}


и формулы

formulas: {
	printLabelButtonDisabled: function(get) {
		var barcode = get("selectedCommand.barcode");
		return barcode ? barcode.indexOf("%") != -1 : true;
	},
	selectedCommand: function(get) {
		return get("commandsGrid.selection");
	}
},

khusamov 03.06.2016 19:02

оф. форум заглох... вообще не отвечают уже

kolka 07.06.2016 09:11

отпуска :dance: пляж и солнце.. временное затишье.. :)

kolka 07.06.2016 09:12

Самому, как не придется столкнуться с формулами, постоянно с ними разбираюсь, будто первый раз пользуюсь.. мне их логика никак не уложиться в голове...


Часовой пояс GMT +3, время: 03:24.