code: function(product, options, callback) {
  
              if (arguments.length === 2) {
                  callback = options;
                  options = null;
              }
  
              if (options && options.clone) {
                  product = product.clone(options.clone);
              }
  
              var bus = this.$.bus,
                  self = this;
  
              //noinspection JSValidateTypes
              flow()
                  .seq(function(cb) {
                      self.$.context.getCollection("printTypes").fetch({
                          fullData: true
                      }, cb);
                  })
                  .seq(function(cb) {
                      bus.setUp(product);
                      product.init(cb);
                  })
                  .exec(function(err) {
                      callback && callback(err, product);
                  });
          }
docs: *
  
  @param {sprd.model.Product} product
  @param {Object} [options]
  @param {Function} callback