0

選択リスト内の項目を繰り返し処理して値を計算する方法はありますか? たとえば、次のデータがあります

「要因」: [ 20, 40, 60, 80, 100 ]

現在、複数選択リスト ボックスにこのように表示されています。HTML ステートメントでレベルを計算します。 レベル 0: 20 レベル 1: 40 レベル 2: 60 レベル 3: 80 レベル 4: 100

次のように開始値を計算して表示したいと思います。レベル 0: 0 ~ 20 レベル 1: 21 ~ 40 レベル 2: 41 ~ 60 レベル 3: 61 ~ 80 レベル 4: 81 ~ 100

現在のレベルを表示しているときに、ノックアウトで以前のレベルに戻るにはどうすればよいですか。例えばセレクトリストボックスで100と表示していて前のレベルが80なのですが、100を表示する際に前のレベル+1と現在のレベル100を表示したいのですが、レベル4:81-100

値はユーザーが変更できるため、15、45、70、80、100 の因数を入力できます。次に、これらの数値に基づいて範囲値を表示したいと思います。0-15、16-45など

ノックアウト/javascript/htmlでこれを行う方法

HTML:

 <select id="factorsSelect" multiple="multiple" size="10" data-bind="options:factors, selectedOptions:selectedFactors, 
          optionsText: function(factor) {return 'Level ' + factors().indexOf(factor) + ': ' + factor}"></select>

JavaScript:

   function FactorInfo(projectid, adjustmentfactor, listpoints) {
    this.projectid = ko.observable(projectid);
    this.adjustmentfactor = ko.observable(adjustmentfactor);
    this.listpoints = ko.observableArray(listpoints);


    this.displayFactorName = ko.dependentObservable(function () {
        return this.projectid() + " -- " + this.adjustmentfactor();
    }, this);
}


    // Factor construction
    var Factor = function () {
        this.factor = ko.observable();
    };
   // get project trusted data from wcf service
    $.getJSON("../../Home/GetProjectTrustSettings", function (jsonData) {
        var mappedGlobal = $.map(jsonData, function (item) {
            vm.adjustmentFactor(item.AdjustmentFactor);
            vm.mySelectedproject(item.ProjectId);
            vm.factors(item.ListPoints);
            return new FactorInfo(item.AdjustmentFactor, item.ProjectId, item.ListPoints);
        });

    });


     var vm = {
        //app observables
        levelIdSize: ko.observable(""),
        myGlobal: ko.observableArray([]),

        // percent tab observables
        percents: ko.observableArray([]),
        percentlevelids: ko.observableArray([]),
        selectedPercents: ko.observableArray([]).trackDirtyFlag(),
        percentItemToAdd: ko.observable(""),
        globalPercent: ko.observable("").extend({ required: "Enter a Global Percent, between 1 and 100." }).trackDirtyFlag(),
        levelSize: ko.observable(""),



        // factor tab observables
        factors: ko.observableArray([]),
        factorlevelids: ko.observableArray([]),
        selectedFactors: ko.observableArray([]).trackDirtyFlag(),
        factorItemToAdd: ko.observable(""),
        adjustmentFactor: ko.observable("").extend({ required: "Enter an Adjustment Factor, between 1 and 100." }).trackDirtyFlag(),

        // project observable
        myProject: ko.observableArray([]),
        mySelectedproject: ko.observable("1"),
        projectIdChange: ko.observable(false),

        // check if something changes with project ID
        setProjectDirtyFlag: function () {
            this.projectIdChange(true);
            //console.log(this.projectIdChange());
        }

    };

MVC 形式を使用する: モデル: システムを使用する。System.Collections.Generic の使用; System.Linq を使用します。System.Web の使用;

 namespace AuditReview.Models
 {
 public class ProjectTrustSetting
   {
    public string ProjectId { get; set; }
    public int AdjustmentFactor { get; set; }
    public List<int> ListPoints { get; set; }
   }
 }

サンプル コントローラー データ:

  public JsonResult GetProjectTrustSettings()
    {
        //create list
        var trustSetting = new List<ProjectTrustSetting>
            {
                new ProjectTrustSetting
                    {
                        ProjectId = "30729",
                        AdjustmentFactor = 5,
                        ListPoints = new List<int>
                            { 20, 40, 60, 80, 100} 
                    }
            };

        return Json(trustSetting, JsonRequestBehavior.AllowGet);
    }

ノックアウト、HTML、JavaScript のいずれかで、開始範囲の値を作成する最良の方法を探しています。私がすでに持っている関数内で、HTMLでそれを行う方法があるはずだと考えていました。

optionsText: function(factor) {return 'Level ' + factor().indexOf(factor) + ': ' + factor}、またはノックアウトで計算されたオブザーバブルまたはその他の提案として。

助けてくれてありがとう

4

1 に答える 1