数据不会从视图传递到viewmodel

时间:2014-08-12 14:14:40

标签: javascript jquery knockout.js

我是Knockout和JavaScript世界的新手,所以这个问题可能有点松散......

我无法将我的绑定数据从我的视图发送到控制JavaScript函数。 HTML:

<tbody data-bind="foreach: deals">
    <tr>
        <td><span data-bind="text: Name"></span></td>
        <td><span data-bind="text: TotalDeals"></span></td>
        <td><span data-bind="text: TotalOpenDeals"></span></td>
        <td><span data-bind="text: TotalYellowDeals"></span></td>
        <td><span data-bind="text: TotalRedDeals"></span></td>
        <td><span data-bind="text: TotalClosedTermDeals"></span></td>
        <td> </td>
        <td><span data-bind="text: BusinessToInstLegal"></span></td>
        <td><span data-bind="text: LawyerTAT"></span></td>
        <td> <a href="#" data-bind='click: $parent.CountryRep'>View Country Report</a></td>
    </tr>
</tbody>

数据绑定后,我希望用户能够点击&#34;查看国家/地区代码&#34;以及要在相应的js文件中发送到此方法的数据:

self.CountryRep = function (obj) {
    // Fetching deals data
    //var locate = "/data/getCountryDeals"
    //datacontext.GetJson(locate, obj.Name,

    data[0].Name = obj.Name;
    data[0].TotalDeals = obj.TotalDeals;
    data[0].TotalOpenDeals = obj.TotalOpenDeals;
    data[0].TotalClosedTermDeals = obj.TotalClosedTermDeals;
    data[0].TotalYellowDeals = obj.TotalYellowDeals;
    data[0].TotalRedDeals = obj.TotalRedDeals;
    data[0].BusinessToInstLegal = obj.BusinessToInstLegal;
    data[0].LawyerTAT = obj.LawyerTAT;

    PlotCountry(data);
}

但是我收到此运行时错误: JavaScript运行时错误:对象不支持属性或方法&#39; CountryRep&#39;

我尝试了一些不同的事情,比如宣布没有&var;&#39; var&#39;并且作为正常功能,在html (<a href="javascript:void(0)" data-bind="click: function(o,e){ $root.CountryRep.call($root, o,e)}">View Country Report</a>中使用不同的调用)无济于事。

有什么建议吗?

更新:所以我已经改变了Raheen在下面指示的所有内容,现在它没有给出错误,但是看起来它似乎没有进入countryRep,因为我放了那里有一个断点,当我点击它时只加载主页。有关为什么会发生这种情况的任何想法? html位于views文件夹中名为report.regional.html的文件中,countryRep位于viewmodels文件夹中名为report.regional.js的js文件中。

1 个答案:

答案 0 :(得分:0)

你应该像这样改变你的功能。它已经足够了,不需要获得单独的数据

var CountryRep = function (obj) {
    self.PlotCountry(obj);
}

CountryRep函数在哪里?我认为它应该是$parent.CountryRep

中的foreach

像这样称呼

data-bind='click: $parent.CountryRep'

编辑

您的视图模型应该是这样的

function test(){
    var self = this
    self.deals = ko.observableArray([])

    self.CountryRep = function (obj) {
            self.PlotCountry(obj);
    }
}

EDIT
它在主页上,因为您没有任何href属性集

<a href="countryrep.html" data-bind='click: $parent.CountryRep'>View Country Report</a>

self.CountryRep = function (obj) {
    self.PlotCountry(obj);
    return true
}