2012-02-03 15 views
0

現在、ASP.NETを使用して開発中です。Knockout JSを使いたいと思います。基本的には、最初に提供されたコードをコピーして貼り付けたものですチュートリアル。ノックアウトJSを開始するには

だから、私はheadにこれを置く:

<script type="text/javascript"> 
    function() { 
     // This is a simple *viewmodel* - JavaScript that defines the data and 
     behavior of your UI 

     function AppViewModel() { 
      this.firstName = ko.observable("Bert"); 
      this.lastName = ko.observable("Bertington"); 

      this.fullName = ko.computed(function() { 
      return this.firstName() + " " + this.lastName();  
     }, this); 

     this.capitalizeLastName = function() { 
      var currentVal = this.lastName();  // Read the current value 
      this.lastName(currentVal.toUpperCase()); // Write back a modified value 
     }; 
    } 

    // Activates knockout.js 
    ko.applyBindings(new AppViewModel()); 
    }(); 
</script> 

...

body
<script type="text/javascript" src="Scripts/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="Scripts/knockout-2.0.0.js"></script> 

と一緒に、私はコードがすべてのノックアウトから取られた

<!-- This is a *view* - HTML markup that defines the appearance of your UI --> 
<p> 
    First name: <strong data-bind="text: firstName"></strong> 
</p> 
<p> 
    Last name: <strong data-bind="text: lastName"></strong> 
</p> 
<p> 
    First name: 
    <input data-bind="value: firstName" /></p> 
<p> 
    Last name: 
    <input data-bind="value: lastName" /></p> 
<p> 
    Full name: <strong data-bind="text: fullName"></strong> 
</p> 
<button data-bind="click: capitalizeLastName"> 
    Go caps</button> 

を置いJSのチュートリアルですが、どういうわけか、値は自動的にバインドされません。それは私にとってはうまくいかない。私はここに何かを逃していますか

答えて

1

あなたはjQueryのを使用したくなかった場合、あなたはまた、可能性:

  1. あなたの外側の自己実行中の関数を削除するには、本体の下部にあるスクリプト参照ノックアウトビューモデルを置きます
+0

こんにちは。それは私が体の底にスクリプトを置いたときに機能します。しかし、JavaScriptは常にトップに置かれるとは思われませんか? – matt

+0

好ましくは底部にある。ブラウザがスクリプトの読み込みを開始する前に、要素を表示する必要があります(通常は*)。 – eppdog

2

DOM(あなたのHTML)がレンダリングされる前にJavaScriptコードが実行されているようです。頭に含まれているJavaScript関数はすぐに実行されます。このコードは、ページが完全にレンダリングされたときにのみ実行されるようにする必要があります。

これはjQuery ready機能で実行できます。

<script type="text/javascript"> 
    $(document).ready(function() { 
    // your existing JavaScript goes here. 
    }) 
</script> 
+0

あなたの方法はそんなに感謝:)あまりにも完璧に正常に動作します! – matt

+0

@matt great!どうかお待ちください。 – ColinE

2

あなたは誤って匿名関数ラッパーを使用しているようです。

コードにmore()を追加する必要があります。

(function() { 
... 
})(); 

の作業例:http://jsfiddle.net/AlfeG/bZatD/

関連する問題