2011-11-07 56 views
3

作爲一個總是使用Javascript的初學者,我決定嘗試從非常簡單的開始和更先進的基因敲除。然而,我甚至無法設法在一個非常簡單的情況下運作。基因敲除文本綁定對輸入不起作用

我猜這個問題很簡單,我有點尷尬地問這裏。但是我不擅長調試Javascript,也不知道bug如何表現出來。

這是網頁的HTML源代碼它已經被asp.net MVC 3生成後:

<html> 

<head> 
    <title>Index</title> 
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> 
</head> 

<body> 

<h2>Index</h2> 

<script src="/Scripts/knockout-1.3.0beta.debug.js" type="text/javascript"></script> 
<script src="/Scripts/knockout-1.3.0beta.js" type="text/javascript"></script> 

<script type="text/javascript"> 

    var viewModel = { 
     name: "Joe", 
     number: "13" 
    }; 

</script> 

<script type="text/javascript"> 
    ko.applyBindings(viewModel); 
</script> 

<ul> 
<li>Name: <input data-bind="text: name"/></li> 
<li>Number: <input data-bind="text: number"/></li> 
</ul> 

<ul> 
<li>Name: <span data-bind="text: name"></span></li> 
<li>Number: <span data-bind="text: number"></span></li> 
</ul> 

</body> 
</html> 

喬或13不會被綁定到輸入或文本框。

試圖把它放在一個ko.observable(),但也不工作。這就像腳本沒有運行。

嘗試使用FireBug進行調試,我可以看到applyBinding被執行,並且viewModel對象包含正確的變量。

這可能是明顯的事情在這裏發生。如果你在這裏看不到它,那麼你能指出在使用FireBug時應該注意什麼嗎?


編輯

試圖給我仍然有問題的解決方案的幾種組合之後。有了一個解決方案的HTML看起來像這樣:

<html> 
<head> 

    <title>Index</title> 

    <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> 
    <script src="/Scripts/knockout-1.3.0beta.debug.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
      var viewModel = { 
       name: ko.observable("Joe"), 
       number: ko.observable("13") 
      }; 
    </script> 

    <script type="text/javascript"> 
     $(function() { ko.applyBindings(viewModel); }) 
    </script> 

</head> 

<body> 
<h2>Index</h2> 

<ul> 
<li>Name: <input data-bind="text: name"></input></li> 
<li>Number: <input data-bind="text: number"></input></li> 
</ul> 

<ul> 
<li>Name: <span data-bind="text: name"></span></li> 
<li>Number: <span data-bind="text: number"></span></li> 
</ul> 

</body> 
</html> 

似乎沒有我使用哪種applyBindings解決方案,他們所有的工作一樣。

所以綁定終於可以工作,但只能在IE和Firefox上使用,而不能在Chrome上使用。此外,觀察結果完全不起作用。我無法通過寫入輸入字段來更新字段。

回答

9

輸入標籤應綁定(即當用戶鍵入到輸入框模型得到更新。)以名字作爲值而不是文本

Name:<input data-bind="value: name"></input> 
9

applyBindings必須在html完全加載後執行。通常,我從jquery.ready方法中調用它,但是如果你在需要綁定的html標籤之後放置包含applyBindings的腳本塊,我想它也會起作用。

+0

好吧,知道這很簡單。那麼慣例是使用這個jquery.ready方法?我想我可以谷歌瞭解它。 –

+0

$(document).ready(ko.applyBindings(viewModel))應該怎麼辦?它不工作。 –

+0

$(function(){ko。applyBindings(viewModel);})將可能更好地工作 –

2

嘗試:

<script type="text/javascript"> 
$(function() { 


    var viewModel = { 
     name: "Joe", 
     number: "13" 
    }; 

    ko.applyBindings(viewModel); 
}); 
</script> 

..而且使姓名和號碼可觀察到的,如果你想雙向綁定

+0

有了這個解決方案+ ko.observable和Bert提供的解決方案(在關閉html標籤下設置applybinding),它可以在firefox和IE中使用,但不適用於Chrome。在IE中,變量出現在輸入框和範圍內,但在更新輸入時不更新。在Firefox中,它不會出現在輸入框中,但在查看源代碼時應用到標記中。在鉻它根本不工作。 –

+0

您可以參考淘汰賽JavaScript文件兩次。只參考一次並將參考移動到頭標籤。 –

0

腳本應寫在綁定控件下方:

<div>Today's message is: <span data-bind="text: myMessage"></span></div><script type="text/javascript"> 
var viewModel = { 
    myMessage: "Hello" 
}; 
ko.applyBindings(viewModel);</script>