Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在加载时击倒JS调用函数_Javascript_Function_Viewmodel_Knockout.js - Fatal编程技术网

Javascript 在加载时击倒JS调用函数

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

我正在使用Knockout.js构建客户端视图模型。在我的视图模型中,我想公开一些可以绑定到页面中元素的函数(典型的MVVM模型)。我只希望调用这些函数来响应按钮的单击事件,但是在构建视图模型时调用它们

我对模型的定义如下:

<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)”
如何传递参数?