javascript - 无法获取未定义或空引用的属性 'subscribe'

标签 javascript knockout.js

在我的 HTML 页面中订阅下拉值更改时,我遇到了实现 knockout Js 的问题。这是我的 HTML

    <div>
      <span>Request Types : </span>
      <select data-bind="options: requestTypes,
                    optionsText: 'Name',
                    optionsCaption: '--Select--',
                   value: selectedRequestType">
       </select>
    </div>

而ViewModel如下所示

                        wd.viewModel = function () {
                        var data = {};
                        var self = this;
                        var url = '';
                        var selectedRequestingCountry = ko.observable("");
                        self.optionsProvider = new wd.optionsProvider(self);
                        self.objGenralInfo = new wd.GI_form(data);
                        /* For Requesting Country */
                        url = wd.ConfigObject.baseUrl + wd.ConfigObject.masterServiceUrl + wd.ConfigObject.category.importingCountries;     // Fetch Requesting Countries     
                        self.importingCountries = self.optionsProvider.get("importingCountries", url, {});
                        self.selectedRequestingCountry = ko.observable("");
                        this.requestingCountryArea = ko.observable("");

                        /* For Generic Name*/
                        url = wd.ConfigObject.baseUrl + wd.ConfigObject.masterServiceUrl + wd.ConfigObject.category.genericNames;     // Fetch Generic Names     
                        self.genericNames = self.optionsProvider.get("genericNames", url, {});
                        self.selectedGenericName = ko.observable("");

                        /* Override Requesting Country Address */
                        self.IsOverride = ko.observable(false);

                        /* For Request Types */
                        self.selectedRequestType = ko.observable("");
                        self.selectedTradeName = ko.observable("");
                    };

                    // Whenever the selected Generic Name changes, populate the Request Type
                    var myName = wd.viewModel.selectedGenericName.subscribe(function () {
                        wd.viewModel.url = wd.ConfigObject.baseUrl + wd.ConfigObject.masterServiceUrl + wd.ConfigObject.category.requestTypes + "/" +
                              wd.viewModel.selectedGenericName().Name;
                        wd.viewModel.requestTypes = wd.viewModel.optionsProvider.get("requestTypes", url, '');                                        // Fetch request types based on generic name
                    }, wd.viewModel);

                    $(function () {
                        ko.applyBindings(wd.viewModel);
                    });

仅在加载通用名称下拉值后才会填充请求类型下拉值。用户必须首先选择通用名称。页面加载时,它会抛出错误“无法获取未定义或空引用的属性‘订阅’”。

非常感谢任何帮助,因为我是 knockout javascript MVVM 框架的新手。

最佳答案

您已将 viewModel 声明为 wd.viewModel = function () {},这是一个构造函数,您需要在绑定(bind)或订阅之前创建它的新实例。如果你添加这样的东西:

wd.viewModel = new wd.viewModel();

在此行之前它应该可以工作

var myName = wd.viewModel.selectedGenericName.subscribe(function () {

关于javascript - 无法获取未定义或空引用的属性 'subscribe',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30620073/

相关文章:

javascript - 将函数参数重新声明为变量?

javascript - 如何通过命令行告诉 Jest 不要运行某个测试文件,而是运行所有其他文件?

javascript - knockout : Accessing property of observable object

javascript - knockout 验证 - isValid() 在值更改后始终为 true

javascript - 根据 jQuery 中多个实例的另一个元素高度设置高度

javascript - 如何为多个选项卡处理一次服务 worker 消息?

php - 帮助在 PHP 中使用 JSON 对象?

knockout.js - Breezejs - 查询本地缓存的模式

javascript - 当 Knockout JS 中可观察的属性发生变化时执行函数

javascript - knockout.js 组件内容