将参数传递给KnockOut Js文本绑定

时间:2013-06-26 09:54:47

标签: data-binding knockout.js parameters

如何将自定义参数传递给文本绑定?

我的HTML

<span data-bind="text: something"></span>

我真的想要这样的东西

<span data-bind="text: something('123456')"></span>

因此span最终包含文本'Something was sent 123456'

self.something = ko.computed(function(p)
{
    return "Something was sent " + p;
}, this);

首要问题是我有几个跨度,每个跨度与可观察数组的计数不同。我曾经使用过这个,但在我的ViewModel中使用所有那些非常相似的计数函数似乎非常麻烦。

<span data-bind="text: countFemale"></span>
<span data-bind="text: countMale"></span>
<span data-bind="text: countFrogs"></span>
<span data-bind="text: countCars"></span>

修改

我的计数功能看起来像这样

self.areaCount = ko.computed(function(areaName)
{
  console.log(this);
  var c = 0; 
  $.each(self.progression(), function(i, obj){                       
    if(obj.model.area() == areaName)
      c++;            
  });

  if(c == 0)
    return '';

  return "(" + c + ")";

}, this);

请注意,我希望能够传入areaName以避免使用此类功能

self.areaCount = ko.computed(function()
{
  console.log(this);
  var c = 0; 
  $.each(self.progression(), function(i, obj){                       
    if(obj.model.area() == "male")
      c++;            
  });

  if(c == 0)
    return '';

  return "(" + c + ")";

}, this);

self.areaCount = ko.computed(function()
{
  console.log(this);
  var c = 0; 
  $.each(self.progression(), function(i, obj){                       
    if(obj.model.area() == "female")
      c++;            
  });

  if(c == 0)
    return '';

  return "(" + c + ")";

}, this);

self.areaCount = ko.computed(function()
{
  console.log(this);
  var c = 0; 
  $.each(self.progression(), function(i, obj){                       
    if(obj.model.area() == "frogs")
      c++;            
  });

  if(c == 0)
    return '';

  return "(" + c + ")";

}, this);

self.areaCount = ko.computed(function()
{
  console.log(this);
  var c = 0; 
  $.each(self.progression(), function(i, obj){                       
    if(obj.model.area() == "cars")
      c++;            
  });

  if(c == 0)
    return '';

  return "(" + c + ")";

}, this);

1 个答案:

答案 0 :(得分:4)

您是否尝试过使用某个功能:

<div data-bind="text: showCount('frogs')"></div>

然后在您的视图模型中添加以下属性:

showCount: function (value) { return '(' + value + ')'; }

在您的情况下,将区域名称传递给测试函数并进行过滤。