Knockout JS - 如果数据绑定在foreach数据绑定中

时间:2015-10-20 07:03:11

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

我试图在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循环运行时,它将检查并仅为那些值为空的那些渲染部分视图。我将如何解决这个问题才能解决这个问题?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

Scope Issue当您尝试在不存在的子级别访问applicationView.ViewModel.AllPersonal[0]时,$parent&amp; root级别。

您可以使用引用$data的{​​{1}}在视图中缩短您的约束力,而不是在视图中使用更广泛的方式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> .bind语法(如评论中所述)