2014-10-28 58 views
0

講起與代碼:淘汰賽渲染的鏈接,點擊處理問題

<div class="alert alert-info" role="alert" title="Shows player rankings">     
      <ul class="nav nav-pills" data-bind="foreach: userRanks"> 
       <!-- ko if: ($index() === 0) --> 
       <li> 
        <a href="#" class="btn btn-default" title="Refresh ranks"><i class="glyphicon glyphicon-refresh"></i></a> 
       </li> 
       <!-- /ko --> 
       <li> 
        <a href="#" data-bind="attr: { title: $data.rank}"> 
         <!-- ko text: $data.username --><!-- /ko --> 
         <span class="badge" data-bind="text: $data.score"></span> 
        </a> 
       </li> 
       <!-- ko if: ($index() === ($parent.userRanks().length - 1)) --> 
       <li class="pull-right">       
        <a href="javascript:void(0)" id="btnPush" class="btn btn-default" data-url="@Url.Action("PushPlayerinfo", "Home")">Update score</a> 
       </li> 
       <li class="pull-right" data-bind="attr: {title: $parent.currentUserName}"> 
        <a href="#">You <span class="badge" data-bind="text: $parent.currentUsertotalScore"></span>/<span data-bind="text: $parent.currentUserRank"></span></a> 
       </li> 
       <!-- /ko --> 
      </ul> 
</div> 

我已經註冊了click處理程序鏈接 'btnPush' 爲:

$("#btnPush").on('click', function() { 
//My code 
}); 

只需用基因敲除的foreach控制,虛擬元素和上下文,不知道我失蹤,但點擊永遠不會註冊爲此鏈接。內嵌HTML onClick()工作雖然:

<a href="javascript:void(0)" onclick="pushData(this);" id="btnPush" class="btn btn-default" title="Click to persist current score" data-url="@Url.Action("PushPlayerinfo", "Home")">Update score</a> 

此外,如果同一鏈路是UL-容器的外面(外的foreach約束力的),它工作正常。有人可以建議我嗎?

+0

因爲您的元素是動態生成的,所以您應該使用委託事件,並在jquery doc中詳細記錄。 – 2014-10-28 20:20:10

+5

如果你無論如何都在使用knockout,爲什麼不用它來處理點擊事件呢? – nemesv 2014-10-28 20:32:57

+0

@nemesv好評。我甚至會說它可能是一個答案,如果不是針對OP,那麼對於那些以搜索查詢結束這個問題的人。當使用KO時,['click' binding](http://knockoutjs.com/documentation/click-binding.html)完全是爲了這個任務。 – Jeroen 2014-10-28 20:38:03

回答

1

你應該用敲除來處理點擊事件。使用jQuery來處理DOM時是一個糟糕的做法,當你使用knockout時,如果你使用ko點擊綁定,它也會很容易。

檢查文檔:http://knockoutjs.com/documentation/click-binding.html

*如果你需要運行一個劫的foreach內的方法,而這種方法屬於VM記得使用$父母或$根密鑰。

<ul data-bind="foreach: items"> 
    <li>       
    <a data-bind="click: $parent.yourMethod()>link</a> 
    </li> 
</ul> 
+0

謝謝ianaya89,我已經做到了。 – 2014-10-31 12:57:03