0

私はチタンのベストプラクティスを読んでいますが、なぜこれが機能していないように見えるのか疑問に思っていました.APIで何が変わったのか教えてもらえますか?

https://wiki.appcelerator.org/display/guides/Mobile+Best+Practices

ui/ToggleBox.js - カスタム チェック ボックス

   function ToggleBox(onChange) {
      this.view = Ti.UI.createView({backgroundColor:'red',height:50,width:50});

      //private instance variable
      var active = false;

      //public instance functions to update internal state, execute events
      this.setActive = function(_active) {
        active = _active;
        this.view.backgroundColor = (active) ? 'green' : 'red';
        onChange.call(instance);
      };

      this.isActive = function() {
        return active;
      };

      //set up behavior for component
      this.view.addEventListener('click', function() {
        this.setActive(!active);
      });
    }
    exports.ToggleBox = ToggleBox;

app.js での使用例

var win = Ti.UI.createWindow({backgroundColor:'white'});
var ToggleBox = require('ui/ToggleBox').ToggleBox;

var tb = new ToggleBox(function() {
  alert('The check box is currently: '+this.isActive());
});
tb.view.top = 50;
tb.view.left = 100;

win.add(tb.view);

add イベントリスナーから呼び出されたときに setActive メソッドを返したくないようです。

4

1 に答える 1

0

クリック リスナーの「これ」は、期待したものではありません。(おそらくビューです。)関数は既に ToggleBox コンテキストであるため、最も簡単な解決策は setActive への直接参照を使用することです。"これ。" 他のコード用に公開している API にのみ必要です。

function ToggleBox(onChange) {
  var view = this.view = Ti.UI.createView({backgroundColor:'red',height:50,width:50});

  //private instance variable
  var active = false;

  //public instance functions to update internal state, execute events
  var setActive = this.setActive = function(_active) {
    active = _active;
    view.backgroundColor = (active) ? 'green' : 'red';
    onChange.call(instance);
  };

  var isActive = this.isActive = function() {
    return active;
  };

  //set up behavior for component
  view.addEventListener('click', function() {
    setActive(!active);
  });
}
exports.ToggleBox = ToggleBox;
于 2012-07-05T14:48:13.517 に答える