首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从外部函数访问视图模型

如何从外部函数访问视图模型
EN

Stack Overflow用户
提问于 2014-08-12 21:32:43
回答 2查看 740关注 0票数 1

我在在视图模型作用域外的javascript函数中访问viewModel中找到了一些类似的例子,但还没有弄清楚在我的特定情况下该做什么。我有几个教师,显示他们的工资,连同工资总额,但想显示他们的工资相对百分比,因为它涉及总额。以下是我的看法:

代码语言:javascript
复制
<table>
    <tr>
    <th></th>
    <th>Salary</th>
    <th>Salary Percent</th>
    </tr>
    <tbody data-bind="foreach: teachers">
    <tr>
        <td data-bind="text: name"></td>
        <td data-bind="text: salary"></td>
        <td data-bind="text: salaryPercent"></td>
    </tr>
    </tbody>
    <tr>
    <td>Total Salary</td>
    <td data-bind="text: totalSalary"></td>
    </tr>
</table>

视图模型:

代码语言:javascript
复制
var Teacher = function(id, name, salary) {
    this.id = id;
    this.name = name;
    this.salary = salary;
    this.salaryPercent = ko.computed(function() {
        // return accounting.toFixed((this.salary/178000)*100, 0) + '%';    // works with hard-coded total salary
        return accounting.toFixed((this.salary/viewModel.totalSalary)*100, 0) + '%';
        // return this.salary;    // works, returns the same salary as this.salary above
    }, this);
};

var viewModel = function(teachers) {
    var self = this;
    self.teachers = ko.observableArray(teachers);
    self.totalSalary = ko.computed(function() {
        var total = 0;
        ko.utils.arrayForEach(self.teachers(), function(teacher) { total += teacher.salary; });
        return total;
    });
};

var initialTeachers = [
    new Teacher(1, "Tom", 40000),
    new Teacher(2, "Betty", 41000),
    new Teacher(3, "Charles", 45000),
    new Teacher(4, "Daniel", 52000)
];

var vm = new viewModel(initialTeachers);
ko.applyBindings(vm);

和css:

代码语言:javascript
复制
td, th {
    border: solid 1px black;
    padding: 2px;
}

JSFiddle

蒂娅,史蒂夫

注意:我使用的是与jsfiddle一起包含的accounting.js库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-12 22:13:19

这个JSFiddle一开始就做你想做的事情。我在viewModelcalculateSalaryPercent中添加了一个函数,它以工资作为参数。我将salaryPercentTeacher中删除,因为它现在是在更高的级别上计算的。

请注意:使用零小数位调用accounting.toFixed会导致加起来不到100%的百分比。

票数 2
EN

Stack Overflow用户

发布于 2014-08-13 05:47:35

除了gorilly的解决方案之外,另一种方法是使用剔除器的绑定上下文$parent直接在视图上构建逻辑。

但对于那些追求“无逻辑模板”的人(不是我)来说,这个解决方案是丑陋的。

http://jsfiddle.net/2tgqb4gg/27/

代码语言:javascript
复制
<tbody data-bind="foreach: teachers">
 <tr>
  <td data-bind="text: name"></td>
  <td data-bind="text: salary"></td>
  <td data-bind="text: accounting.toFixed(salary/$parent.totalSalary()*100,0)+'%'"></td>
 </tr>
</tbody>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25274402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档