2017-07-11 2 views
0

関数をビューモデルにバインドせずに、Knockout.JS変数をonclick関数に渡すことはできますか?以下はKnockout.JS変数をバインディングなしでonclick関数に渡すことはできますか?

、私は以下の特定の行のためのユーザ名パラメータを渡すためにしようとしている:

<tbody data-bind="foreach: viewModel"> 
     <tr> 
      <td data-bind="text: UserId"></td> 
      <td><button onclick="alertRowName($element.UserName)"></button></td> 
     </tr> 
</tbody> 

<script> 
    function alertRowName(string){ 
    alert(string); 
    } 

//in my example the model is from a c# viewmodel.. 
viewModel = ko.mapping.fromJS(model); 
var jsModel = ko.toJS(viewModel);  
ko.applyBindings(viewModel); 

</script> 

答えて

2

は、あなたはそれをこのような何かを行うことができます。
EDIT

hmmmm ..ちょっと気付いた。縛らないでなぜあなたは明らかにすることができますか?

var app = Window.app || {}; 
 
app.model = [{ 
 
    UserId: 1, 
 
    UserName: "User Name Here", 
 
}]; 
 

 
app.ViewModel = function ViewModel(model){ 
 
    var self = this; 
 
    self.data = ko.mapping.fromJS(model); 
 
}; 
 

 
app.ViewModel.prototype.alertRowName = function alertRowName(user) { 
 
    alert(user.UserName()); 
 
}; 
 

 
ko.applyBindings(new app.ViewModel(app.model));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script> 
 

 
<table> 
 
    <tbody data-bind="foreach: data"> 
 
    <tr> 
 
     <td data-bind="text: UserId"></td> 
 
     <td><button data-bind="click: $root.alertRowName, text: UserName"></button> </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

あなたは次の操作を行うことができますDRAGONS

BE HERE ...用心が、私は強く、これをやっていないことをお勧めします。 これはWindowオブジェクトに関数をアタッチし、グローバル関数にしています。各イベントハンドラには一般的に使用できるイベントオブジェクトが用意されています。

var app = Window.app || {}; 
 
app.model = [{ 
 
    UserId: 1, 
 
    UserName: "User Name Here", 
 
}]; 
 

 
app.ViewModel = function ViewModel(model){ 
 
    var self = this; 
 
    self.data = ko.mapping.fromJS(model); 
 
}; 
 

 
app.ViewModel.prototype.alertRowName = function alertRowName(user) { 
 
    alert(user.UserName()); 
 
}; 
 

 
ko.applyBindings(new app.ViewModel(app.model)); 
 

 
Window.myButtonClick = function(){ 
 
    var item = ko.dataFor(event.currentTarget); 
 
    alert(item.UserName()); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script> 
 

 
<table> 
 
    <tbody data-bind="foreach: data"> 
 
    <tr> 
 
     <td data-bind="text: UserId"></td> 
 
     <td><button onclick="Window.myButtonClick()" data-bind="text: UserName"></button> </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

結合せずにボタンの内側のonclick = "javascriptfuction(KOvariable)" を作ることを意味します。関数をビューモデルにバインドする代わりに。 – Ophiucus

+1

私はそれを使用することを強くお勧めしますが、あなたが尋ねることをするいくつかのコードを追加しました。ビュー・モデルのアプローチの利点は、ビュー・モデルが必要とするさまざまな関数の周りにコンテナを配置することです。 –

関連する問題