1

私はextjs + yiiで働いています。私は次のように考えています-

Ext.define('Balaee.view.qb.qbqns.QbqnsView',
{
        extend:'Ext.view.View',
        id:'qbqnsViewId',
        alias:'widget.QbqnsView',
        store:'qb.QbqnsStore',
        autoScroll: true,
        config:
        {
            tpl:'<tpl for=".">'+
                '<div id="main">'+
                '</br>'+
            //  '<b>Question :-</b> {pollQuestion}</br>'+
                '<h1 id="q">Question :-</h1> {question} </br>'+

                '<tpl for="options">'+     // interrogate the kids property within the data
                 '<p>&nbsp&nbsp<input type="radio" name="{parent.questionId}" value="{optionId}">&nbsp{option}</p>'+
                //'<p>&nbsp&nbsp<input type="radio" name="{questionId}">&nbsp{option}</p>'+
                '</tpl></p>'+
                '<p>---------------------------------------------------------</p>'+
                '</div>'+
                '</tpl>',
            itemSelector:'div.main' 
        }
});// End of login class

このビューには、質問とそれに関連するオプションが表示されています。回答を選択して送信ボタンをクリックした後、Questionid とその選択したラジオ ボタン オプションを送信します。データがjsonの形式になると、これらの選択したラジオボタンの値をキャプチャしてjsonを作成し、その後パラメーターとして渡します。したがって、コントローラーでは、コードを次のように記述しました-

var answers = '{"data":[';
        var i=0;
        QbqnsStore.each(function(model){
            i++;
            var inputs = document.getElementsByName(model.get('questionId'));
            console.log(document.getElementsByName(model.get('questionId')));
            console.log("length is"+inputs.length);
            for (var j = 0; j < inputs.length; j++) {
                if (inputs[j].checked) {
                    console.log("count of store is"+QbqnsStore.count());
                    //if (i == QbqnsStore.count()){
                    if (i == QbqnsStore.count()){
                        console.log("value of i is"+i);
                        answers = answers + '{"paperId":"'+paperNumber+'","userId":"'+userId+'","questionId":"'+inputs[j].name+'","option":'+inputs[j].value+'}'
                    //i=1;
                    }
                    else{
                        console.log("value of i is"+i);
                        answers = answers + '{"paperId":"'+paperNumber+'","userId":"'+userId+'","questionId":"'+inputs[j].name+'","option":'+inputs[j].value+'},'
                    }
                }
            }// End of inner for loop
        }); //End of each

        answers =answers+']}';
        console.log("selected data is:");
        console.log(answers);
        var storeObject=this.getStore('qb.QbquestionoptionStore');
        storeObject.load({

            params:{
                data: answers 
            },
            callback: function(records,operation,success){

            },
            scope:this
        });

ユーザーがすべての質問を解決すると、正しく機能します。すべての質問の解決の場合、上記の関数はjsonを次のように形成しています-

{"data":[{"paperId":"1517","userId":"116","questionId":"1","option":1},{"paperId":"1517","userId":"116","questionId":"2","option":4},{"paperId":"1517","userId":"116","questionId":"3","option":9},{"paperId":"1517","userId":"116","questionId":"4","option":9}]} 

正しい形式です。しかし、ユーザーが紙から最初の 1 つまたは 2 つの質問だけを解決している場合、その json は次のように形成されます。

{"data":[{"paperId":"1518","userId":"116","questionId":"2","option":4},]} 

つまり、余分なコンマが json の最後に挿入され、json が無効になります。したがって、ユーザーが最初の 1 つまたは 2 つの質問のみを解決するときに、json からこの余分なコンマを削除する方法。ガイドしてください

4

1 に答える 1

0

あなたの状態は決して真実ではないと思います。やってみました :

if (i == QbqnsStore.count() - 1){

それ以外の

if (i == QbqnsStore.count()){

?

于 2013-03-26T13:45:48.030 に答える