1

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

我的 HTML

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

我真的很想要这样的东西

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

这样span最终会包含文本“发送的内容 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);

请注意,我希望能够传入 anareaName以避免有很多这样的功能

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);
4

1 回答 1

4

您是否尝试过仅使用一个函数:

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

然后在您的视图模型上添加此属性:

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

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

于 2013-06-26T10:50:56.310 回答