2015-08-24 2 views
3

Я хотел бы знать, можно ли получить элемент DOM из кендо mvvm.Как получить элемент DOM из модели просмотра Kendo?

Мой вход определяется как:

<input id="myInput" type="text" data-bind="value: model.Name" /> 

в какой-то момент я устанавливаю значение в JavaScript, как:

myViewModel.set("model.Name", "John Doe"); 

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

myViewModel.getElement("model.Name").className = "MyClass; 

Кажется, кендо не имеет такой функции. Противоположное можно Тхо с kendoBindingTarget

+0

Там не кажется быть простым способом сделать это. Я много работал с Kendo (но предпочел бы не повторять) и немного вырыл логику mvvm, но я не мог найти внутренний метод, который они используют в моем терпении. Если вы готовы вкладывать в него больше времени, вы, вероятно, можете найти его, но это сомнительно, если это стоит усилий. Хотя вам может и не понравиться этот вход, лично я думаю, что есть лучшие альтернативы, чем Kendo для mvvm по причине, продемонстрированной вашим вопросом: нестандартное поведение часто является болью для реализации с Kendo. – Nit

+0

Какие другие альтернативы, кроме кендо? – zeppelin

+0

Как с чем угодно, [Google поможет вам] (https://www.google.com/search?q=javascript+mvvm). Лично я предпочитаю [Rivets.js] (http://rivetsjs.com/), но это вопрос как личного предпочтения, так и других библиотек, с которыми вы работаете. – Nit

ответ

1

я в конечном итоге с помощью custom binding, где на обновления (который является набор) У меня есть доступ к элементу:

HTML

<input id="myInput" type="text" data-bind="customValue: model.Name" /> 

Js

kendo.data.binders.customValue= kendo.data.Binder.extend({ 
    init: function(element, bindings, options) { 
     kendo.data.Binder.fn.init.call(this, element, bindings, options); 

     var that = this; 
     $(that.element).on("change", function() { 
      that.change(); 
     }); 
    }, 
    refresh: function() { 
     var that = this, 
      value = that.bindings["customValue"].get(); 

     $(that.element).val(value).addClass('MyClass'); //<======that.element======== 
    }, 
    change: function() { 
     var value = this.element.value; 
     this.bindings["customValue"].set(value); 
    } 
}); 
0

Вы должны быть в состоянии получить элемент виджета, как это:

var myElement = $("#myWindow").data("kendoWindow").element; 

Вам просто нужно использовать правильный виджет имя независимо от вашего виджета. According to the documentation это вернет его как объект jQuery.

+0

Я согласен с этой простой работой arround, у Kendo MVVM нет обратной функциональности kendoBindingTarget. Следовательно, для доступа к DOM из viewmodel мы можем просто добавить id или class в элемент DOM и получить виджет по его идентификатору или классу. В моем случае я должен получить доступ к тексту DropDownList после привязки шаблона к модели. Это достаточно просто, без создания пользовательских привязок. – kite

Смежные вопросы