WebSocket

Какой наименее костыльный способ использовать автообновление данных через webSockets существует в webix? Faye не предлагать, т.к. у меня бэкэнд на golang.

Можно сделать свой прокси.
Если посмотреть код интеграции с Faye - он тоже оформлен как прокси. Можно по анлогии сделать свое решение на нативных ВебСокетах

webix.proxy.faye = {
	$proxy:true,
	init:function(){
		this.clientId = this.clientId || webix.uid();
	},
	load:function(view){
		var selfid = this.clientId;

		this.client.subscribe(this.source, function(update){
			if (update.clientId == selfid) return;

			webix.dp(view).ignore(function(){
				if (update.operation == "delete")
					view.remove(update.data.id);
				else if (update.operation == "insert")
					view.add(update.data);
				else if (update.operation == "update"){
					var item = view.getItem(update.data.id);
					if (item){
						webix.extend(item, update.data, true);
						view.refresh(item.id);
					}
				}
			});
		});
	},
	save:function(view, update, dp, callback){
		update.clientId = this.clientId;
		this.client.publish(this.source, update);
	}
};

И кстати, есть

Сразу предупреждаю - я не web программист;
Faye - первый раз слышу: почитаю как время будет.

Есть рабочее "WebDesctop"ное приложение (webUI - мозги C#) - ВСЁ на стороне сервера - который принимает и отправляет JSON немедленно (один клиент - один поток)
полностью свой код вместо всяких Apach’ей (и http, и websocket)

пытаюсь адаптировать UI на Webix (сражу скажу для меня Webix = ПАНАЦЕЯ … молорики!!!)

методы как element[name].apply(element, param{});
события как element.attachEvent(name, function (a1,a2) {.sendAsJSON({a1,a2}).};

insert как webix.ui(data);
update как element.define(data);

вроде все хорошо, но… какая то сыроватость есть…
всё надо к единому знаменателю приводить

ИМХО

!!!) придумайте JSON парсер - чтобы функции можно было парсить из JSON строки (например
{“id”:“asd”,“func”:$function(e){}$}
=
{id:“asd”,func=function(e){}}
вместо доллара какой нибудь спецсимвол…)

  1. аргументы у событий надо в eventArg объект запаковать чтобы по JSON отправлять можно было (а то у каждого события 1 или более аргументов разноформатных - надо костыли лепить)

  2. в таблице разрешить добавлять события к edit’ам

  3. данные обновлять через define({id:“1”,data[{id:“1.1”}]})

  4. слышал у браузеров появилась возможность работать с SQL - реализуйте интерфейс…

  5. сделайте Webix плагин к jQuery - чтоб работать с webix через него типа $("%asd").rows([{id:“asd”}])

  6. с документацией трудно работать, на английском, да и не совсем полная, о многих функциях случайно узнаешь когда не так работают как думаешь.

PS нифига я настрочил, и это только навскидку

PPS идей много, можно блог открывать ))) да времени нет, по почте могу изливать, или на форуме флудить.

PPPS че сказать то хотел - можно какойнить маленький демо на основе выше указанного кода для websocket’a - а то не могу понять логику, что присылать, что забирать, и как быть с функциями.

Любое решение всегда можно подогнать под себя. В том числе создать парсер или кастомный метод обновления данных.

(2) Для таблицы существует пять таких событий. Они есть в списке в API.

(4) Работа с классическим SQL-сервером описана, например, здесь и здесь. Также реализован интерфейс для работы с IndexedDB, по аналогии можно создать интерфейс и для других браузерных БД.

(5) Интеграция с jQuery уже существует.

А приведённый выше код взят напрямую из библиотеки и касается статьи, в конце ктоторой есть ссылка на нужное Вам демо.

Это всего лишь мое скромное мнение.
Вы итак проделали огромную работу.
Я высказываю то что мне не хвататет или на мой взгляд улучшило бы ваш продукт.

[2] не событие к таблице в котором через switch case обрабатывать событие а на прямую к ячейке.

[4]HTML 5. Работа с Web SQL базой данных / Habr

[5]я имел ввиду чтобы работать не через jQuery а как с jQuery. Один доллар в начале, дальше через точку методы.

извините, что вклиниваюсь в ваше обсуждение

(5) Интеграция с jQuery уже существует.

речь идёт о том, чтобы можно было в стиле jQuery обращаться к элементам таблицы (ну, например, покажите, как можно через jQuery для определённой ячейки таблицы задать свойство, например, сменить CSS)

или назначать обработчики в стиле
$(‘селектор’).on(‘dblclick’…

а не в стиле:
dtable.attachEvent(‘onItemDblClick’,

или вызывать методы $(селектор).МетодWebix()

p.s. сразу, заранее, прошу меня извинить, если я пургу несу, знания JS/jQuery у меня небольшие…

Sergebl, (5) вы уловили суть моего вопроса.

День добрый

аргументы у событий надо в eventArg объект запаковать

eventArg это паттерн из типизированных языков программирования, в javascript в этом нет особого смысла. Если очень надо то внутри любого события можно использовать arguments который и будет примитивным eventArg объектом.

в таблице разрешить добавлять события к edit’ам

не сделано сознательно, дабы избежать проблем с производительностью
и текущее решение не означает что надо использовать гигантский switch-case, у одного события может быть много обработчиков, то есть можно на одно и тоже onBeforeEditStart навесить 20 разных обработчиков, для разных ячеек

  1. данные обновлять через define({id:“1”,data[{id:“1.1”}]})

define обновляет конфигурацию
для данных есть .parse и .updateItem апи

  1. слышал у браузеров появилась возможность работать с SQL - реализуйте интерфейс…

Это мертвый стандарт, часть браузеров отказалась его поддерживать, так что будущего у него нет.

речь идёт о том, чтобы можно было в стиле jQuery обращаться к элементам таблицы

а какого рода селекторы были бы полезны в таком апи? какие операторы над ячейками?

Мы точно не будем вносить это в основную библиотеку, но я не вижу проблем сделать такую систему поверх уже существующего API

аргументы у событий надо в eventArg объект запаковать

element.attachEvent(item.name, function (e) {
webSocketSend(stringify(e));
// универсальный метод на все случаи жизни
// нет необходимости конвертировать arguments от каждого
// конкретного события, тем более что не все запаковывается в stringify
})

в таблице разрешить добавлять события к edit’ам

datatable.attachEvent(‘edit’, function (index,value,container) {
if(index==??){
var view = webix.ui( { view:“counter”, value:value, container:container});
// аля свобода
}
})

данные обновлять через define({id:“1”,data[{id:“1.1”}]})

а какого рода селекторы были бы полезны в таком апи? какие операторы над ячейками?

.data(id):object - возвращает итем
.data(id,name):value - возвращает значение
.data(id, name, value) - задает значение
.data(id,{name1:value1,name2:value2}) - задает группу значений
.data(id, function(name, value)): -
Функция вызывается отдельно, для каждого из выбранных элементов. При вызове, ей передаются следующие параметры:
name — позиция элемента в наборе,
value — текущее значение

на вскидку (по следам .css())