2012-06-28 2 views
7

Я довольно новичок в концепции развития клиентской стороны javascript. Я сталкиваюсь с проблемой, хотя, возможно, я просто не понимаю, как сделать что-то с месивом фреймворков.Sammy.js и Knockout.js => Шаблоны без шаблонов?

Я знаю, что хочу использовать нокаут для его богатых клиентских сторон. Я также хочу использовать Sammy.js, чтобы разрешить маршрутизацию и передачу данных в представления для нокаутов (я исхожу из фона MVC, где я использую модель с данными, затем возвращаю представление (модель), а MVC связывает это хорошо и хорошо для меня) ,

Так что теперь я пытаюсь сделать что-то похоже на стороне клиента ...

Вот мой Index.html:

<!DOCTYPE html> 

<html> 
    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" /> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> 

    <title>The EClassifieds Mobile</title> 



     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> 
     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> 
<!--  <script type="text/javascript" src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>--> 
     <script type="text/javascript" charset="utf-8" src="./scripts/cordova-1.8.1.js"></script> 
     <script type="text/javascript" charset="utf-8" src="./scripts/knockout.js"></script> 
     <script type="text/javascript" charset="utf-8" src="./scripts/templ.js"></script> 
     <script type="text/javascript" charset="utf-8" src="./scripts/sammy.js"></script>  
     <script type="text/javascript" charset="utf-8" src="./scripts/sammy.tmpl.js"></script> 
     <script type="text/javascript" charset="utf-8" src="./services/RouteManager.js"></script> 
     <script type="text/javascript" charset="utf-8" src="./services/ApplicationManager.js"></script> 


     <link rel="stylesheet" href="./style/site.css" type="text/css" media="screen" title="no title" charset="utf-8"/>  
<!--  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />--> 

    </head> 
    <body> 

    <div id="main"> 
    <h1>HELLO WORLD!</h1> 
    <!--Sammy should update the content of this div dynamically, creating a SPA (single page application)--> 
    </div> 

    </body> 
</html> 

Вот моя конфигурация Сэмми.

(function ($) { 

    alert('Building Routes'); 
    var app = $.sammy('#main', function() { 
     this.use('Tmpl', 'html'); 
     this.get('#/', function (context) { 
      alert('Rendering Partial for Login page'); 
      context.app.swap('Loading...'); 
      this.render("/views/Login.html"); 
     }); 

    }); 

    $(function() { 
     app.run('#/'); 
    }); 

})(jQuery); 

Вот мой login.html

<!--Model File Goes Here --> 
    <script type="text/javascript" charset="utf-8" src="../models/Login.js"></script> 

    <fieldset title="Please Login to Begin :"> 

      <div data-role="content" style="padding: 15px"> 
       <div data-role="fieldcontain"> 
        <fieldset data-role="controlgroup" data-mini="true"> 
         <label for="txtUsername"> 
          Username 
         </label> 
         <input id="txtUsername" data-bind="value: username" placeholder="Stevie" value="" type="text" /> 
        </fieldset> 
       </div> 
       <div data-role="fieldcontain"> 
        <fieldset data-role="controlgroup" data-mini="true"> 
         <label for="txtPassword"> 
          Password 
         </label> 
         <input id="txtPassword" data-bind="value: password" placeholder="yep!" value="" type="password" /> 
        </fieldset> 
       </div> 
       <a id="btnLogin" data-role="button" data-transition="fade" href="#page1" > 
        Login 
       </a> 
      </div> 

      <div id="errorText"> 
       <h1></h1>    
      </div> 

      <p id="deviceProperties">Loading device properties...</p> 

    </fieldset> 

<script type="text/javascript"> 
     $(document).ready(function() { 
       ko.applyBindings(new LoginDataModel(0, "Stevie", "theTV", true)); 

      }); 

</script> 

мне нужен способ, чтобы передать данные от Сэмми получить обработчик, на странице нокаута. Есть ли способ сделать это, или я пытаюсь сделать невозможное?


UPDATE 1: Я бы очень хотелось, чтобы быть в состоянии сделать что-то вроде:

var app = $.sammy('#main', function() { 
      this.use('Tmpl', 'html'); 
      this.get('#/', function (context) { 
       alert('Rendering Partial for Login page'); 
       context.app.swap('Loading...'); 
       var data = getLoginData(); 
       this.render("/views/Login.html", data); 
      }); 

Sammy делает это точно такой же вещи, используя другие рамки шаблонов, однако, я не вижу, как я будет привязывать $ data в представлении Knockout к данным, переданным из Sammy.

ответ

2

Плагин Knockout.js-External-Templates поможет вам в достижении такого поведения. Хорошая отправная точка будет от здесь EDIT: Ссылка «Исходная точка» теперь относится к вредоносным программам.

Даже Джон Папа одобряет это here

выше решение полезно только тогда, когда вы часто повторно использовать шаблоны. Используйте встроенные шаблоны, когда это возможно. Встраивание шаблонов - и использование привязки foreach - примерно на 1/3 быстрее, чем применение шаблона из отдельного элемента DOM, так называемая привязка имени шаблона. Дополнительная информация об этом here

+0

Ваша ссылка на отправку теперь идет на сайт вредоносного ПО. Согласно статье SO http://stackoverflow.com/help/how-to-answer «Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы у ваших коллег было некоторое представление о том, что это такое и почему оно есть Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме ». – AndyJ

+0

Andy J спасибо за определение, исходная ссылка опустилась – Ananda

15

Не уверен, что если вы видели это, но WebMail учебник на веб-сайте knockoutjs использует sammy.js для маршрутизации:

http://learn.knockoutjs.com/#/?tutorial=webmail

Вот ссылка на готовый продукт (так что вы можете просматривать источник, если вы не хотят следовать всему учебнику) http://learn.knockoutjs.com/WebmailExampleStandalone.html

+1

Этот ответ не является полезным. Демонстрация даже не использует шаблоны. – Ananda