更新单元格矩阵中的数据

时间:2013-11-26 18:02:16

标签: javascript scope titanium

此代码实现了60个单元格电子表格,6x10行,列。每行末尾有两个标签,一个用于行总数,另一个用于总计。这里的主要问题是如何在按下calc按钮时更新行和运行总标签。

我还想将滚动视图底部的按钮移动到窗口底部,它始终可见。底部按钮的另一个视图?

Ti.include("toast.js"); // 3rd-party code; displays notifications

var i=0;
var r=0;
var rows = 10;
var columns = 6;

left = ["0%","12%","24%","36%","48%","60%"];



Titanium.UI.setBackgroundColor('#000');

var win1 = Titanium.UI.createWindow({  
    title:'Target 1',
    exitOnClose: true,
    backgroundColor:'#fff'
});


win1.addEventListener('androidback' , function(e){
     win1.close();
     var activity = Titanium.Android.currentActivity;
     activity.finish();
});

var scrollView1 = Ti.UI.createScrollView({
  bottom:120,
  contentHeight: 'auto',
  layout: 'vertical'
});


if (Ti.UI.Android){
  win1.windowSoftInputMode = Ti.UI.Android.SOFT_INPUT_ADJUST_PAN;
}


var buttonCalc = Titanium.UI.createButton({
   title: 'Calc',
   top: 10,
   width: 100,
   height: 50,
   left: "10%"
});




var lbAttrs1 = {
            text: "000",
            left: "74%",
            color:'#000',width:'auto',height:'auto',textAlign:'left',
            font:{fontSize:24,fontWeight:'regular'}
            };


var lbAttrs2 = {
            text: "000",
            left: "88%",
            color:'#000',width:'auto',height:'auto',textAlign:'left',
            font:{fontSize:24,fontWeight:'regular'}
            };


var baseAttrs = {
    borderStyle : Titanium.UI.INPUT_BORDERSTYLE_ROUNDED,
    keyboardType:  Titanium.UI.KEYBOARD_NUMBERS_PUNCTUATION,
    maxLength: 2,
    top: 10,
    height: 60,
    value: "",
    width: '12%',
    color : '#000000'
};

 var tfields = [];
 var labels1 =  [];
 var labels2 = []; 


buttonCalc.addEventListener('click',function(e)
{

  var a = 0;
  var b = 0;

for (j=0;j<rows;j++)
{
  a = 0;

  for (i=0;i<columns;i++)
    a = parseInt(tfields[j][i].value) + a; 

   b = b + a;

   labels1[j] = a.toString();
   labels2[j] = b.toString();
}

for (j=0;j<rows;j++)

alert( labels1[j]+'  '+labels2[j]+ ' ' +  j.toString());

});


function createRow1(i) // start create row 

{ 

  row1 = Ti.UI.createView({
    backgroundColor: 'white',
    borderColor: '#bbb',
    borderWidth: 1,
    width:'100%', height: 70,
    top: 0, left: 0 });

var tfield1 = [];
var label1 =  [];
var label2 = []; 

for (i=0;i<columns;i++)
  {
    tfield1[i] = Ti.UI.createTextField(baseAttrs); 
    label1[i] = Ti.UI.createLabel(lbAttrs1);
    label2[i] = Ti.UI.createLabel(lbAttrs2);
  }


  tfield1[0].addEventListener('change', function()
    {
    if (tfield1[0].value > 10)
      {
       tfield1[0].value = "";  
       showMessageTimeout("More than 10.",15);
      }
     }); 

 tfield1[1].addEventListener('change', function()
   {
    if (tfield1[1].value > 10)
       {
      tfield1[1].value = "";  
       showMessageTimeout("More than 10.",15);
      }  

    }); 


  tfield1[2].addEventListener('change', function()
   {
    if (tfield1[2].value > 10)
       {
      tfield1[2].value = "";  
       showMessageTimeout("More than 10.",15);
      }
    }); 



  tfield1[3].addEventListener('change', function()
   {
    if (tfield1[3].value > 10)
        {
      tfield1[3].value = "";  
       showMessageTimeout("More than 10.",15);
      }  

    }); 

   tfield1[4].addEventListener('change', function()
   {
    if (tfield1[4].value > 10)
         {
      tfield1[4].value = "";  
       showMessageTimeout("More than 10.",15);
      }    
    }); 

tfield1[5].addEventListener('change', function()
   {
    if (tfield1[5].value > 10)
         {
      tfield1[5].value = "";  
       showMessageTimeout("More than 10.",15);
      }          
   }); 


tfield1[0].left =  left[0];
tfield1[1].left =  left[1];
tfield1[2].left =  left[2];


tfield1[3].left =  left[3];
tfield1[4].left =  left[4];
tfield1[5].left =  left[5];


for (i=0;i<columns;i++)
 {
   row1.add(tfield1[i]);
   row1.add(label1[i]);
   row1.add(label2[i]);
  }

;
tfields.push(tfield1);  
labels1.push(label1);
labels2.push(label2);

return row1;
}  /// end of createrow1

for(i = 0; i < rows; i++){
row1 = createRow1(i);
scrollView1.add(row1);
}

win1.add(scrollView1);
scrollView1.add(buttonCalc);
// win1.add(buttonCalc);

win1.open();

1 个答案:

答案 0 :(得分:0)

第1点。

这是一个拼写错误,您应该分别将labels1[j]labels2[j]的每一次出现替换为labels1[j].textlabels2[j].text

buttonCalc.addEventListener('click',function(e)
{

    var a = 0;
    var b = 0;

    for (j=0;j<rows;j++)
    {
        a = 0;

        for (i=0;i<columns;i++){
            var newValue = parseInt(tfields[j][i].value);
            if(!isNaN(newValue) && typeof(newValue) === 'number')
                a = newValue + a;
        } 

        b = b + a;

        labels1[j].text = a.toString();
        labels2[j].text = b.toString();
    }
    for (j=0;j<rows;j++)
        Ti.API.info( labels1[j].text +'  '+labels2[j].text + ' ' +  j.toString());

});

并且必须更改这些部分:

function createRow1(i) // start create row 
{ 
...
    for (i=0;i<columns;i++)
    {
        tfield1[i] = Ti.UI.createTextField(baseAttrs); 
    }
    label1 = Ti.UI.createLabel(lbAttrs1); //there is only one per row
    label2 = Ti.UI.createLabel(lbAttrs2); //there is only one per row
...
    for (i=0;i<columns;i++)
    {
        row1.add(tfield1[i]);
    }
    row1.add(label1); //there is only one per row
    row1.add(label2); //there is only one per row

    tfields.push(tfield1);  
    labels1.push(label1);
    labels2.push(label2);

    return row1;
}  /// end of createrow1

第2点。

你可以这样做:

var scrollView1 = Ti.UI.createScrollView({
    top:0,
    height:'60%', //Put your desired value here
    contentHeight: 'auto',
    layout: 'vertical'
});

...

var buttonCalc = Titanium.UI.createButton({
    title: 'Calc',
    top: '70%', // Put your desired value here greater than scrollView1.height
    width: 100,
    height: 50,
    left: "10%"
});

...
win1.add(scrollView1);
//scrollView1.add(buttonCalc);
win1.add(buttonCalc);

额外点。

您需要在baseAttrs中设置 softKeyboardOnFocus 属性:

    var baseAttrs = {
        borderStyle : Titanium.UI.INPUT_BORDERSTYLE_ROUNDED,
        keyboardType:  Titanium.UI.KEYBOARD_NUMBERS_PUNCTUATION,
        softKeyboardOnFocus: Titanium.UI.Android.SOFT_KEYBOARD_SHOW_ON_FOCUS,
        maxLength: 2,
        top: 10,
        height: 60,
        value: "",
        width: '12%',
        color : '#000000'
    };
这样,softKeyboard将第一次显示在焦点上。

最后,祝你的应用好运: - )