7

私はjavascriptクライアント側開発の概念にかなり慣れていません。私は問題に直面していますが、フレームワークのマッシュで何かを達成する方法がわからないだけかもしれません。

Knockoutは、クライアントサイドの豊富な機能のために使用したいと思っています。また、Sammy.jsを使用して、データをノックアウトビューにルーティングおよび渡すことができるようにします(モデルにデータを詰め込んでからview(model)を返す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>

また、sammygetハンドラーからノックアウトページにデータを渡す方法も必要です。これを行う方法はありますか、それとも私は不可能を試みていますか?


更新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);
            });

サミーは他のテンプレートフレームワークを使用してこれとまったく同じことを行いますが、ノックアウトビューの$dataをサミーから渡されたデータにバインドする方法がわかりません。

4

2 に答える 2

15

これを見たかどうかはわかりませんが、knockoutjs WebサイトのWebメールチュートリアルでは、ルーティングにsammy.jsを使用しています。

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

完成品へのリンクは次のとおりです(チュートリアル全体をフォローしたくない場合は、ソースを表示できます) http://learn.knockoutjs.com/WebmailExampleStandalone.html

于 2012-06-29T13:19:10.307 に答える
2

Knockout.js-External-Templatesプラグインは、この動作を実現するのに役立ちます。良い出発点はここからです 編集:「出発点」リンクはマルウェアに移動します。

ジョン・パパでさえここでそれを支持しています

上記のソリューションは、テンプレートを頻繁に再利用する場合にのみ役立ちます。可能な限りインラインテンプレートを使用してください。インラインテンプレート–およびforeachバインディングを使用すると、別のDOM要素からテンプレートを適用するよりも約1/3速く実行されます。これは、いわゆる名前付きテンプレートバインディングです。これに関する詳細はこちら

于 2014-05-06T13:28:52.397 に答える