Является ли следующий фрагмент хорошей практикой при использовании компонентов нокаута + Asp.Net MVC? Любые недостатки, которые я, возможно, не хватает?Зависимости от инъекции с компонентом нокаута через Razor
в основном инъекционные часть зависимостей компонентов кё (в основном начальные данные) с помощью Razor стороне сервера визуализации ...
Фрагмент кода:
<my-component params="{
foo: '@Model.FooProperty',
bar: '@Model.BarProperty',
baz: @Json.Encode(@Model.SomeArray)
}"> </my-component>
EDIT:
Для избегая проблем с выводом строки, отмеченных @Quango, я внедрил этот помощник:
public static stringEscapeString(this HtmlHelper helper, string value)
{
return HttpUtility.JavaScriptStringEncode(value, true);
}
Использование:
<my-component params="{
foo: '@Html.EscapeString(Model.FooString)', ...
Я был бы осторожен в отношении ввода значений строк без механизма эвакуации. если 'Model.FooProperty =" O'Brien "' вы получите ошибку рендеринга. Кроме этого, единственным способом было бы использовать значения viewModel, которые могут быть неприемлемыми (если значение не изменяется) – Quango
@Quango: Что вы подразумеваете под значениями viewModel? – Daniel
Нокаут может связывать значения в разделе «params» с литеральными значениями (как в вашем примере) или с наблюдаемыми значениями в режиме просмотра нокаута, если он присутствует. Таким образом, foo, переданный компоненту, будет наблюдаемым значением, и компонент может увидеть изменения. Примеры на страницах моих скриптов, например. https://jsfiddle.net/Quango/tnphvvgd/ – Quango