我正在使用Knockout.js構建客戶端視圖模型。在我的視圖模型中,我想公開一些可以綁定到頁面元素(典型的MVVM模型)的函數。我只希望這些功能以響應來自點擊一個按鈕事件中調用,但是當被構建視圖模型它們被稱作......加載時敲除JS調用函數
我定義我的模式是這樣的:
<script type="text/javascript">
var ViewModel = function(initialData) {
var self = this;
self.id = initialData;
self.isSubscribed = ko.observable(false);
self.name = ko.observable();
self.SubscribeToCategory = function() {
$.ajax({
url: '@Url.Action("Subscribe", "Category")',
type: 'POST',
data: {
categoryId: self.id
},
success: function() {
self.isSubscribed(true);
},
failure: function() {
self.isSubscribed(false);
}
});
alert('Subscribing...');
};
self.UnsubscribeFromCategory = function() {
$.ajax({
url: '@Url.Action("Unsubscribe", "Category")',
type: 'POST',
data: {
categoryId: self.id
},
success: function() {
self.isSubscribed(false);
},
failure: function() {
self.isSubscribed(true);
}
});
alert('Unsubscribing...');
};
self.LoadCategory = function() {
$.ajax({
url: '@Url.Action("GetCategory", "Category")',
type: 'POST',
async: true,
data: {
categoryId: self.id
},
dataType: 'json',
success: function (data) {
self.isSubscribed(data.IsSubscribed);
self.name(data.Name);
}
});
};
self.LoadCategory();
};
$(document).ready(function() {
var data = '@Model';
var viewModel = new ViewModel(data);
ko.applyBindings(viewModel);
});
但是,當我執行代碼時,兩個警報會自動啓動,但我並不期待他們。我使用ASP MVC4,並且正在使用視圖模型的HTML低於:
<p>
ID: <span data-bind="text: id"></span>
</p>
<div id="subscribe" data-bind="visible: isSubscribed == false">
<button data-bind="click: SubscribeToCategory()">Subscribe</button>
</div>
<div id="unsubscribe" data-bind="visible: isSubscribed == true">
<button data-bind="click: UnsubscribeFromCategory()">Unsubscribe</button>
</div>
<div>
Category Name: <span data-bind="text: name"></span>Is Subscribed: <span data-bind="text: isSubscribed">
</span>
</div>
我通過網上教程和其他一些淘汰賽的樣品,還有其他地方在我的代碼,我已經看過使用敲除,但我不明白爲什麼這兩個函數(SubscribeToCategory和UnsubscribeFromCategory)在文檔加載時觸發。
看起來你在同一時間得到了答案。謝謝! – Aidos 2012-04-26 12:16:51
如果你需要一個帶參數的函數調用?像:'data-bind =「單擊:SucscribeToCategory(25)」' – Wrench 2015-01-19 19:34:46
您可以使用'bind'函數來實現自己的功能。在你的示例@Wrench中,它會是這樣的:'data-bind =「單擊:SucscribeToCategory.bind($ data,25)」' – 2015-02-24 18:44:54