小编Kai*_*Kai的帖子

xsl:fo内联换行和换行符

我正在努力使用我的xsl:fo(Apache Fop 1.1).我正在尝试使用内嵌图像和内联文本元素生成一个块,其中可能包含换行符.

<fo:block>
    <fo:inline>First Line&#10;Second Line, Image: </fo:inline>
    <fo:inline>
        <fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/>
    </fo:inline>
    <fo:inline> some more Text on Line 2&#10;3rd Line</fo:inline>
</fo:block>
Run Code Online (Sandbox Code Playgroud)

我希望输出会是

FirstLine
SecondLine, Image: || some more Text on Line 2
3rd Line
Run Code Online (Sandbox Code Playgroud)

我得到的是:

FirstLine SecondLine, Image: || some more Text on Line 2 3rd Line
Run Code Online (Sandbox Code Playgroud)

我已经玩了一段时间,在fo:block元素和/或fo:inline元素上有以下属性,给出了奇怪或意外的结果.

white-space-collapse="false" 
white-space-treatment="preserve" 
linefeed-treatment="preserve"
Run Code Online (Sandbox Code Playgroud)

有什么建议?

编辑1:将内联元素更改为这样的块

<fo:block white-space-treatment="ignore">
    <fo:block white-space="pre">First Line&#xA;Second Line, Image: </fo:block>
    <fo:block>
        <fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/>
    </fo:block>
    <fo:block white-space="pre"> some more Text on …
Run Code Online (Sandbox Code Playgroud)

xsl-fo apache-fop

9
推荐指数
1
解决办法
2万
查看次数

SimpleInjector如何为单个通用实现注册多个开放通用接口

我正在尝试使用SimpleInjector作为IOC容器,到目前为止我对此非常满意.但是现在我遇到了一个我无法解决的问题.我搜索了SO和文档,但似乎还没有回答.我已经看过SimpleInjector的howto doc但是它没有涵盖开放的通用接口.

我有两个这样的通用接口:

public interface IEventPublisher<TEvent>
{
   void Publish(TEvent Event);
}
public interface IEventSubscriber<TEvent>
{
    void Subscribe(Action<TEvent> CallBack);
}
Run Code Online (Sandbox Code Playgroud)

这两个开放的通用实现:

class EventMediator<T> : IEventPublisher<T>, IEventSubscriber<T>
{
    List<Action<T>> Subscriptions = new List<Action<T>>();

    public void Publish(T Event)
    {
        foreach (var Subscription in this.Subscriptions)
            Subscription.Invoke(Event);
    }

    public void Subscribe(Action<T> CallBack)
    {
        this.Subscriptions.Add(CallBack);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我正在设置SimpleInjector,如下所示:

this.Container = new SimpleInjector.Container();
this.Container.RegisterOpenGeneric(typeof(IEventPublisher<>), typeof(EventMediator<>), Lifestyle.Singleton);
this.Container.RegisterOpenGeneric(typeof(IEventSubscriber<>), typeof(EventMediator<>), Lifestyle.Singleton);
this.Container.Verify();
Run Code Online (Sandbox Code Playgroud)

我想要存档的是:在要求IEventPublisher或IEventSubscriber时,我想获得完全相同的实例.此外,此实例应为任何T的单例.

我用这些线测试了这个:

class DummyEvent {}

var p = this.Container.GetInstance<IEventPublisher<DummyEvent>>();
var s = this.Container.GetInstance<IEventSubscriber<DummyEvent>>();
var areSame …
Run Code Online (Sandbox Code Playgroud)

c# generics open-generics simple-injector

6
推荐指数
1
解决办法
809
查看次数

如何触发所有控件的DataBinding验证?

我有一个OpenUI5表单,包含许多Inputcontrols.这些Inputcontrols使用OpenUI5 DataBinding绑定到模型,如文档中所述.例如:

new sap.m.Input({                           
    value: {
        path: "/Position/Bezeichnung",
        type: new sap.ui.model.type.String(null, {
            minLength: 1,
            maxLength: 128
        })
    }
}) 
Run Code Online (Sandbox Code Playgroud)

如上例所示,我在stringlength上使用约束.当用户更改输入的值时,将触发验证,并根据Validationresult 调用此处描述的功能之一.在这些函数中,我正在设置控件的ValueState,如下所示:

setupValidation: function() {
    var oCore = sap.ui.getCore();
    oCore.attachValidationError(function (oEvent) {
        oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
    });
    oCore.attachValidationSuccess(function (oEvent) {
        oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.None);
    });
    oCore.attachFormatError(function (oEvent) {
        oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
    });
    oCore.attachParseError(function (oEvent) {
        oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
    });
},
Run Code Online (Sandbox Code Playgroud)

我们假设绑定的模型变量是初始的.我正在加载视图,属性值被解析并显示为空.尽管未满足约束,但未调用Validationerror/Parseerror方法.这似乎是OpenUI5的标准行为.只有控件中的更改才会被验证.

现在让我们假设我有一个提交按钮,并且Inputcontrol的值仍为空.当用户点击提交按钮时,我想为我的视图的所有子控件触发DataBinding Validation.这将验证上述输入并导致错误.

我的问题是:如何触发视图中所有子控件的数据绑定验证?

关于SO的另一个问题是海报要求定义必要字段的方法.建议的解决方案是在控件上调用getValue()并手动验证值.我认为这有点麻烦,因为形成和约束信息和逻辑已经存在.

validation sapui5

6
推荐指数
2
解决办法
7729
查看次数

如何在Webpack中将JSON文件导出为单独的块?

我正在使用webpack构建一个webapp,但遇到一些我无法弄清自己或文档的问题。

我想要实现的是配置webpack,因为它不包含一个特定的json文件或将它们全部都包含在主包中。但是,仍然可以这样要求它们:

define(['app/config.json'], function (config) {
...
});
Run Code Online (Sandbox Code Playgroud)

我当前的json文件的webpack配置如下所示:

module: { 
    loaders: [
        { 
            test: /\.json/, 
            loader: "json" 
        },
        // ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

上面显示的配置将加载JSON文件,对其进行解析,并且需要它们的模块只需获取实例化的js对象即可。奇妙!config.json文件包含一些特定于安装的变量,这些变量应可由应用程序的用户编辑。

当使用像这样的文件加载器时:

        { 
            test: /\.json/, 
            loader: "file",
            query: {
                name: 'res/[name].[ext]'
            }  
        },
Run Code Online (Sandbox Code Playgroud)

捆绑包中不包含JSON文件,但要求它不加载文件,它只是返回文件名。有任何想法吗?

webpack

5
推荐指数
1
解决办法
6581
查看次数

OPENUI5:未显示命名模型聚合绑定数据

阅读多模型支持后,我尝试实现它.使用命名模型时,会发生绑定,但不会显示数据.

//控制器

sap.ui.controller("view.apps.Apps", {

    onInit : function () {
        var oAppsModel = new sap.ui.model.json.JSONModel("model/apps.json");
        this.getView().setModel(oAppsModel, "apps");
    }
});
Run Code Online (Sandbox Code Playgroud)

//查看

sap.ui.jsview("view.apps.Apps", {

    getControllerName: function() {
        return "view.apps.Apps";
    },

    createContent: function(oController) {

        var oInboxList = new sap.m.List({
            inset: true,
            id: "appsList",
            headerText: "Apps"
        });

        oInboxList.bindItems("apps>/items", function(sID, oContext) {
            return new sap.m.StandardListItem({
                title: '{name}',
                description: '{name}'
            })
        });

        var oPage = new sap.m.Page({
            title: "Apps",
            content: [oInboxList]
        });

        return oPage;
    }
 });
Run Code Online (Sandbox Code Playgroud)

// apps.json

{
    "items": [{
        "name": "ABC",
        "view": "" …
Run Code Online (Sandbox Code Playgroud)

sapui5

3
推荐指数
1
解决办法
6769
查看次数