2014-11-27 3 views

ответ

2

Так это вроде старой должности, но я просто должен был работать по этому же вопросу и нашел время, пытаясь решить. Понял, что я отвечу на вопрос о потомстве.

Свойство «values», похоже, не работает 100% в сетке кендо в MVVM. Я работал над этим в двухэтапном процессе.

  1. Tack «this.viewModel» (где «viewModel» - это то, что вы вызываете вашу виртуальную машину) перед «loggerSeverityValues». При редактировании поля это даст вам раскрывающийся список.
  2. Используйте функциональность шаблона, чтобы отобразить правильное значение в сетке. Я использую небольшую функцию, чтобы сделать это проще:
getText: function (matchValue, valuesArray, text, value) 
{ 
    if (text === undefined) 
    { 
     text = 'text'; 
    } 

    if (value === undefined) 
    { 
     value = 'value'; 
    } 

    var retText = "No Value Found"; 

    finalArr = $.grep(valuesArray, function (val, integer) 
    { 
     return val[value] == matchValue; 
    }); 

    if (finalArr.length > 0) 
    { 
     retText = finalArr[0].text; 
    } 

    return retText; 
} 

Окончательный вид поля будет что-то вдоль линий этого:

{ field: 'severity', width: 270, values: this.viewModel.loggerSeverityValues, template: '#: getText(severity, this.viewModel.loggerSeverityValues) #' } 

Обратите внимание, что с GetText() вы можете переопределить параметры текста и значения, если вам нужно.

В любом случае это сработало для меня. Вид обходного пути, но по состоянию на выпуск 2014.3.1411 в любом случае, похоже, что привязки MVKM кендо будут работать правильно с внешними ключами.

EDIT:

Для тех, кто в настоящее время с помощью кендо NG2 + компоненты, той же схеме, но с трубой преобразования работ.

Труба:

import { Pipe, PipeTransform } from '@angular/core'; 
 

 
@Pipe({ name: 'getText' }) 
 
export class GetTextPipe implements PipeTransform { 
 
    transform(value: any, idPropertyName: string, valuePropertyName: string, valueArray: any[]): any { 
 
     if (value != null && valueArray != undefined) { 
 
      let retIndex = valueArray.map(v => v[idPropertyName]).indexOf(value); 
 
      return valueArray[retIndex][valuePropertyName]; 
 
     } 
 
     else { 
 
      return ''; 
 
     } 
 
    } 
 
}

Использование:

<kendo-grid-column field="severity" title="Severity" width="150px"> 
 
    <template kendoGridCellTemplate let-dataItem="dataItem"> 
 
    {{dataItem.severity | getText:'severity':'severityName':loggerSeverityValues}} 
 
    </template> 
 
</kendo-grid-column>

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