微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从控件接收属性到模型 CanJS定义模块

如何解决如何从控件接收属性到模型 CanJS定义模块

我有可配置认参数的控制:

   define([
  'jquery','can','moment','controls/base','mustache!./becauseYouShopped_view','./becauseYouShopped_model','coreMods/clickHistory/v2/clickHistory_model','coreMods/addToFavorite/addToFavorite_control',],function ($,can,moment,BaseControl,becauseYouShoppedView,BecauseYouShoppedModel,ClickHistoryModel,AddToFavorite) {
  var startDate = moment().subtract(90,'days').format('YYYY-MM-DD'),endDate = moment().add(1,'days').format('YYYY-MM-DD');

  var BecauseYouShopped = BaseControl({
    defaults: {
      moduleConfigName: 'becauseYouShopped',hideRebatePrefix: true,rebateAdditionalPrefix: 'Shop and',uSEOldRebateValueWithoutCurrency: true,tiered: {
        rebateAdditionalPrefix: 'Shop and earn',uSEOldRebateValueWithoutCurrency: true
      },apiParams: {
        start_date: startDate,end_date: endDate,},headingPrefix: 'Because you shop at',dataLimitForGetSimilarMerchant: 14,}
  },{
    init: function (element,options) {
      ClickHistoryModel.findOne(options.apiParams).done(function (data) {
        var memberClicksAndOrders = data.attr().response;

        if (memberClicksAndOrders.length) {
          this.shoppedMerchantsInfo = this.getRecentlyShoppedMerchantName(memberClicksAndOrders);

          if (this.shoppedMerchantsInfo) {
            this.getRecommendedMerchantsAndRender();
          }
        }
      }.bind(this)).fail(function (error) {
        mn.log(error);
      });
    },return BecauseYouShopped;
});

我需要将此参数 dataLimitForGetSimilarMerchant: 14, 导出到此控件的模型,以便在 getSimilarMerchantData 函数中使用它。 但是当我导入它时 - 您可以在此处的代码中看到:

   define(['jquery','utils/promiseUtils','models/base','coreMods/bonusComponents/becauseYouShopped/becauseYouShopped_control',promiseUtils,BaseModel,BecauseYouShopped) {
  console.log("1 log: ",BecauseYouShopped);
  return BaseModel.extend({
    /**
     * Get response from one content group and type
     * @param contentGroupIdAndType
     * @returns {*}
     */
    getSimilarMerchantData: function (merchantId,merchantName) {
      var deferred = $.Deferred(),self = this;
      var controlOptions = BecauseYouShopped.defaults.dataLimitForGetSimilarMerchant;
      console.log("2 log: ",BecauseYouShopped);
      if (!merchantId) {
        return can.Deferred().reject('merchant id is not specified');
      }

      var options = {
        url: mn.contentAPIEndPoint + '/merchants/' + merchantId + '/similar',method: 'GET',dataType: 'json',headers: self.getAjaxHeaders(),data: self.getDefaultAjaxData({limit: controlOptions})
      };

  },{});
});

我收到 BecauseYouShoppedundefined

那么,如何将这个参数导入模型?

解决方法

您拥有导入因为YouShopped 模型的BeforeYouShopped 控件,但该模型也在导入该控件。如果您不尝试在线程中使用依赖项模块,则这种循环依赖有时可以由您的依赖项管理器解决——例如,StealJS 会这样做——但是如果您使用 RequireJS 就像您是基于使用define(),您将需要稍后要求() 您的依赖项之一,而不是在初始加载时对其进行定义()。详情请访问 https://requirejs.org/docs/api.html#circular

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。