Значения по умолчанию в свойстве ko.observable не отображаются - PullRequest
0 голосов
/ 18 сентября 2011

Я сейчас пробую knockoutjs, с моим довольно элементарным знанием javascript.Для этого я настроил базовое приложение ASP.NET MVC 3.Вот фрагмент, который я настроил в представлении Home / Index.cshtml:

@if(false)
{
    <script src="../../Scripts/jquery-1.6.3.js" type="text/javascript"></script>
    <script src="../../Scripts/knockout-1.3.0beta.debug.js" type="text/javascript"></script>
}

@{
    ViewBag.Title = "Home Page";
}

<script type="text/javascript">
    var entryDataViewModel = {
        registration: ko.observable("Registration"),
        registeredName: ko.observable("Name"),
        entryClass: ko.observable("Junior")
    };

    ko.applyBindings(entryDataViewModel);
</script>

<h2>@ViewBag.Message</h2>
<p>
    Registration: <span data-bind="text: registration"></span><br />
    Name: <span data-bind="text: registeredName"></span><br />
    Class: <span data-bind="text: entryClass"></span><br />

    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

По какой-то странной причине ничего не отображается, даже значения по умолчанию.Если я отлаживаю через Firebug, то ViewModel тоже показывает свойства как пустые.Я что-то здесь пропустил?

Большое спасибо, Дани.

ДОБАВЛЕНО: содержимое _Layout.cshtml - это все стандартные стандартные вещи, кроме добавления нокаута и использования jquery 1.6.3

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/knockout-1.3.0beta.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery-1.6.3.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>
<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>My MVC Application</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                </ul>
            </nav>
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

Ответы [ 2 ]

1 голос
/ 18 сентября 2011

Ответ, за который я проголосовал выше, работал только тогда, когда я попробовал его на простой веб-странице, а не тогда, когда я попробовал это в моем представлении MVC.Как оказалось, я поставил блок скриптов не в ту позицию.Я переместил его в конец представления после обработки элементов страницы.Другой вариант - обернуть его в $ (document) .ready (), затем вы можете поместить блок скрипта, содержащий ViewModel, и вызывать ko.applyBindings () где угодно ...

1 голос
/ 18 сентября 2011

используйте $(document).load(function(){:

<script type='text/javascript'> 
  //<![CDATA[ 
  $(document).load(function(){
  var entryDataViewModel = {
        registration: ko.observable("Registration"),
        registeredName: ko.observable("Name"),
        entryClass: ko.observable("Junior")
    };

    ko.applyBindings(entryDataViewModel);
  });
  //]]> 
  </script> 

Посмотрите: http://jsfiddle.net/S8Rh5/ - все работает отлично.

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