【问题标题】:Knockout JS - if data binding inside foreach data bindingKnockout JS - 如果数据绑定在 foreach 数据绑定中
【发布时间】:2016-01-18 17:23:10
【问题描述】:

我正在尝试在 foreach 绑定中获取 if 条件,但它对我不起作用。以下是我尝试过的代码:

查看

<div class="section-wrap break" id="ServicePlan_PrioritySection" data-bind="foreach:applicationView.ViewModel.AllPersonal">
            <div data-bind="if:IsValidServicePlan(applicationView.ViewModel.AllPersonal[0], false)">
            @{Html.RenderPartial("~/Views/Home/ServicePlan/_Priority1.cshtml");}
        </div>

被调用的函数

function IsValidServicePlan(priority, checkDetailFlag) {
var upActivityTempArr = ko.observableArray([]);

ko.utils.arrayForEach(priority.UpcomingActivities(), function (activity) {
    if (activity != undefined)
        if (!IsValidActivity(activity))
            upActivityTempArr.push(activity); // push valid Activity
});
ko.utils.arrayForEach(upActivityTempArr(), function (activity) {
    if (activity != undefined)
        priority.UpcomingActivities.remove(activity); // push valid Activity
});

if (hasValue(priority.Detail())
|| hasValue(priority.TimeFrames())
|| hasValue(priority.Feedback.SatisfactionLevel()) && priority.Feedback.SatisfactionLevel() != Satisfaction_Level
|| hasValue(priority.Feedback.FeedbackComment()) && priority.Feedback.FeedbackComment() != "Add Comment"
    ) {
    return true;
}}

当从 if 条件调用函数时,优先级参数出来为未定义。我的要求是,当 foreach 循环运行时,它只会检查和渲染那些值不为空的部分视图。我将如何解决这个问题才能解决这个问题?

非常感谢。

【问题讨论】:

  • 试试这个IsValidServicePlan.bind($data,applicationView.ViewModel.AllPersonal[0], false)希望有帮助
  • 或者你可以使用function(){IsValidServicePlan(applicationView.ViewModel.AllPersonal[0], false)}欢呼
  • 当我使用上述语句时它不起作用。
  • 这两个语句都不起作用你的意思是说?如果是这样的话,你能检查一下你是否真的在applicationView.ViewModel.AllPersonal[0] 中获取数据
  • 是的,我正在获取数据:但是,我将代码用作
    @{Html.RenderPartial("~/Views/Home/ServicePlan/_Priority1.cshtml") ;}

标签: jquery asp.net-mvc-4 knockout.js


【解决方案1】:

Scope Issue 当您尝试在不存在的子级别访问applicationView.ViewModel.AllPersonal[0] 时,它存在于$parentroot 级别。

您可以使用 $data 来缩短您在视图中的绑定,它指的是 current context,而不是使用更广泛的方式 ($parent.applicationView.ViewModel.AllPersonal[0]) 在视图中

查看:

<div class="section-wrap break" id="ServicePlan_PrioritySection" data-bind="foreach:applicationView.ViewModel.AllPersonal">
<div data-bind="if:IsValidServicePlan($data,false)">
 @{Html.RenderPartial("~/Views/Home/ServicePlan/_Priority1.cshtml");}
</div>

作为适当的替代方法,您可以在视图中使用 .bindfunction 语法(如 cmets 中所述)

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2018-07-18
    • 1970-01-01
    • 2014-02-28
    • 2014-03-28
    • 2023-03-31
    • 2016-12-09
    • 2015-03-25
    相关资源
    最近更新 更多