从Sling Model注入另一个Sling模型

时间:2016-09-20 12:31:21

标签: cq5 aem sling sling-models

给出了2个吊索模型,我想注入其中一个。这是否可以使用注释,或者我是否需要创建PostContruct方法作为解决方法?

示例:

模型A

@Model(adaptables = Resource.class)
public class ModelA { 
   @ValueMapValue(name = "jcr:title", injectionStrategy = InjectionStrategy.OPTIONAL)
   private String title;

   @Inject // Not working! 
   private ModelB modelB;
}

模型B

@Model(adaptables = Resource.class)
public class ModelB { 
   @ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL)
   private String text;

}

2 个答案:

答案 0 :(得分:4)

从1.1.0版本的Sling Models开始,您可以使用@Self注释来注入可以根据当前适应性进行调整的模型。在这种情况下来自Resource的{​​{1}}。

  

注入自适应对象本身(如果字段的类匹配或是超类型)。如果存在@Self注释,则尝试将adaptable调整为字段类型。

ModelA

答案 1 :(得分:0)

您无法将ModelB注入ModelA,您可以做的是获取ModelA中的资源实例并将其调整为ModelB

 function getColorFromTheme()
 {
    var color ;

    XrmServiceToolkit.Rest.RetrieveMultiple(
                "ThemeSet",
                "",
                function (results) {
                    if (results.length >= 1)
                        for (var i = 0; i < results.length; i++) {
                            if(results[i].IsDefaultTheme===true)
                            color=results[i].GlobalLinkColor;
                        }
                },
                function (error) {
                    alert(error.message);
                },
                function onComplete() {

                },
                false
            );

    return color; 
 };