Как включить привязку данных в KnockoutJS с помощью ASP.NET MVC 3 «Razor» View Engine? - PullRequest
16 голосов
/ 03 мая 2011

Я пытаюсь реализовать этот пример нокаута с использованием механизма просмотра "Razor" в ASP MVC 3.

Первый раздел посвящен простому связыванию данных массива C # с использованием стандартного механизма просмотра ASP. Я пробую пример с использованием "Razor", и эта строка:

<script type="text/javascript"> 
    var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>; 
</script>

приводит к пустой переменной для initialData .

Я тоже пробовал это:

@{
    string data = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);
}

А затем указал исходные данные следующим образом:

var initialData = @Html.Raw(data);

Заполняет initialData набором данных, но привязка не работает.

Я просто пытаюсь привязать этот набор данных для отображения количества идей, как в примере:

<p>You have asked for <span data-bind="text: gifts().length">&nbsp;</span> gift(s)</p>

Почему в этом случае не работает привязка данных?

Ответы [ 2 ]

24 голосов
/ 04 мая 2011

Самый простой способ в MVC3 сделать:

var initialData = @Html.Raw(Json.Encode(Model));
11 голосов
/ 03 сентября 2011

Я столкнулся с той же самой проблемой и обнаружил, что именно моя собственная глупость вызвала проблему (которая так часто бывает).Я забыл дождаться загрузки DOM для вызова ko.applyBindings(viewModel) - просто используя:

$(document).ready(function () { ko.applyBindings(viewModel); });

Таким образом, весь сценарий как

<script type="text/javascript">
var initialData = @Html.Raw( new JavaScriptSerializer().Serialize(Model));
var viewModel = {
    gifts: ko.observableArray(initialData)
};

$(document).ready(function () { ko.applyBindings(viewModel); });
</script>

Это работало с knockout-1.2.1.js и jquery-1.5.1.js

...