Javascript 在加载时击倒JS调用函数
我正在使用Knockout.js构建客户端视图模型。在我的视图模型中,我想公开一些可以绑定到页面中元素的函数(典型的MVVM模型)。我只希望调用这些函数来响应按钮的单击事件,但是在构建视图模型时调用它们 我对模型的定义如下:Javascript 在加载时击倒JS调用函数,javascript,function,viewmodel,knockout.js,Javascript,Function,Viewmodel,Knockout.js,我正在使用Knockout.js构建客户端视图模型。在我的视图模型中,我想公开一些可以绑定到页面中元素的函数(典型的MVVM模型)。我只希望调用这些函数来响应按钮的单击事件,但是在构建视图模型时调用它们 我对模型的定义如下: <script type="text/javascript"> var ViewModel = function(initialData) { var self = this; self.id = initialData; self.i
<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);
});
var ViewModel=函数(初始数据){
var self=这个;
self.id=初始数据;
self.isSubscribed=ko.可观察(假);
self.name=ko.observable();
self.SubscribeToCategory=函数(){
$.ajax({
url:'@url.Action(“订阅”、“类别”),
键入:“POST”,
数据:{
categoryId:self.id
},
成功:函数(){
自我发布订阅(真实);
},
失败:函数(){
自订(假);
}
});
警报('订阅…');
};
self.UnsubscribeFromCategory=函数(){
$.ajax({
url:'@url.Action(“取消订阅”、“类别”),
键入:“POST”,
数据:{
categoryId:self.id
},
成功:函数(){
自订(假);
},
失败:函数(){
自我发布订阅(真实);
}
});
警报(“取消订阅…”);
};
self.LoadCategory=函数(){
$.ajax({
url:'@url.Action(“GetCategory”、“Category”),
键入:“POST”,
async:true,
数据:{
categoryId:self.id
},
数据类型:“json”,
成功:功能(数据){
自我发布订阅(数据发布订阅);
self.name(data.name);
}
});
};
self.LoadCategory();
};
$(文档).ready(函数(){
变量数据=“@Model”;
var viewModel=新viewModel(数据);
应用绑定(视图模型);
});
然而,当我执行代码时,这两个警报会自动触发,但我并不期望它们会触发。我使用的是ASP MVC4,下面是使用视图模型的HTML:
身份证件:
订阅
退订
类别名称:
签署人:
我已经浏览了在线教程和其他一些敲除示例,以及我代码中使用敲除的其他地方,但我不明白为什么这两个函数(SubscribeCocategory和UnsubscribeFromCategory)会在文档加载时启动。
这花了我一秒钟的时间,但最终只是一个简单的解决方案。从数据绑定中删除()=“click:SubscribeToCategory()”并使您的两个数据绑定处理程序this data bind=“click:SubscribeToCategory”和data bind=“click:unsubscribefomcategory”绑定中的函数名中的括号似乎是问题所在 ()的不应该在那里。所以它应该看起来像:
<button data-bind="click: SubscribeToCategory">Subscribe</button>
订阅
看起来你和我在同一时间得到了答案。谢谢你!如果你需要一个带参数的函数调用?例如:data bind=“click:succscribetocategory(25)”
您可以将bind
函数用于自己的函数。在您的示例@扳手中,它是这样的:data bind=“click:SucscribeToCategory.bind($data,25)”
如何传递参数?