Javascript 在Knockout.js中绑定函数的结果

Javascript 在Knockout.js中绑定函数的结果,javascript,c#,asp.net,knockout.js,Javascript,C#,Asp.net,Knockout.js,我在使用Knockout.js创建视图模型时遇到了一个问题。我想问的一点是如何实现一个函数的绑定,该函数使用一个可观察变量作为参数 我有以下几类实体框架: public class Actor { public int Id { get; set; } public string ActorName { get; set; } public List<ActorCurrentStatus> ActorStatuses { get; set; } } publ

我在使用Knockout.js创建视图模型时遇到了一个问题。我想问的一点是如何实现一个函数的绑定,该函数使用一个可观察变量作为参数

我有以下几类实体框架:

public class Actor
{
    public int Id { get; set; }
    public string ActorName { get; set; }
    public List<ActorCurrentStatus> ActorStatuses { get; set; }
}

public class ActorCurrentStatus
{
    public long Id { get; set; }
    public double Rating { get; set; }
    public MatchType MatchType { get; set; }
    public string CurrentStatusIndicator { get; set; }
    //Foreign Key Conditions
    public long Actor_Id { get; set; }
    public virtual Actor Actor{ get; set; }
}

public enum MatchType
{
    type_team,
    type_ffa
}

public class ActorsListViewModel //View Model (not in database)
{
    public int Id { get; set; }
    public List<Actor> Actors { get; set; }
}
然后在视图中创建一个js对象:

public ActionResult ActorsList()
{
    ActorsListViewModel vm= new ActorsListViewModel();
    viewModel.vm= _db.Actors.ToList();
    return View(vm);
}
<script type="text/javascript">
    var model = @Html.Raw(JsonConvert.SerializeObject(Model, Formatting.Indented,
                    new JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    }));
</script>
<button data-bind="click: ChangeMode('type_team')">TYPE_TEAM</button>
<button data-bind="click: ChangeMode('type_ffa')">TYPE_FFA</button>
在这里,这是正确的:

<div data-bind="foreach: Actors()">
    <div data-bind="text: $parent.getActorStatus(ActorStatuses ,'type_team').Rating"></div>
</div>
更改绑定后,视图在加载时开始显示参与者对类型_ffa的评级,单击按钮时不会更新信息


有人能指出代码和结构中存在哪些错误吗?

可观察对象要求您通过将其作为参数传递来赋值。因此,它需要您执行以下操作:

function ChangeMode(str) {
  switch (str) {
    case 'type_team':
        viewModel.mode('type_team');
        break;
    case 'type_ffa':
        viewModel.mode('type_ffa');
        break;
    default:
        break;
  }
}
另外,从
ChangeMode
函数的构造方式来看,我相信调用
ko.applyBindings
时函数不会绑定在一起。这意味着这只是一个普通的javascript函数。因此,您不能使用
数据绑定:单击
触发此操作,而是使用普通onclick

<button onClick="ChangeMode('type_team')">TYPE_TEAM</button>
<button onClick="ChangeMode('type_ffa')">TYPE_FFA</button>
TYPE_团队
型游离脂肪酸

可观察对象要求您通过将其作为参数传递来分配值。因此,它需要您执行以下操作:

function ChangeMode(str) {
  switch (str) {
    case 'type_team':
        viewModel.mode('type_team');
        break;
    case 'type_ffa':
        viewModel.mode('type_ffa');
        break;
    default:
        break;
  }
}
另外,从
ChangeMode
函数的构造方式来看,我相信调用
ko.applyBindings
时函数不会绑定在一起。这意味着这只是一个普通的javascript函数。因此,您不能使用
数据绑定:单击
触发此操作,而是使用普通onclick

<button onClick="ChangeMode('type_team')">TYPE_TEAM</button>
<button onClick="ChangeMode('type_ffa')">TYPE_FFA</button>
TYPE_团队
型游离脂肪酸
检查此链接

您需要在映射中绑定ChangeMode函数。

检查此链接


您需要在映射中绑定ChangeMode函数。

实际上,我没有将函数包含到映射中。它与Ihsan的解决方案配合得很好。谢谢。实际上我没有包括映射的函数。它与Ihsan的解决方案配合得很好。非常感谢。
<button onClick="ChangeMode('type_team')">TYPE_TEAM</button>
<button onClick="ChangeMode('type_ffa')">TYPE_FFA</button>