首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在aurelia中编写html文件

在aurelia中编写html文件
EN

Stack Overflow用户
提问于 2016-10-11 16:23:09
回答 1查看 658关注 0票数 1

我希望在android中实现类似于“包括”的功能,但在aurelia中实现:

如何将普通html文件内容注入我的视图,在父视图中计算绑定,而不使用自定义元素?绑定innerhtml是不够的,因为根据文档,绑定表达式被绕过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 09:23:58

正如阿什利已经说过的,使用<compose view="./your-view.html"></compose>元素将处理现有的HTML文件,并且它将继承父上下文。

如果您想动态地(从文件、数据库或以编程方式构建HTML )组合HTML,那么使用ViewCompiler将给您提供最佳的性能和灵活性,因为与compose相比,它比compose在内部构建自定义元素要少一层。

对于另一个(但相关的)问题,我在这里给出了类似的答案:

Aurelia dynamic binding

您可以使用text插件将HTML作为文本加载到变量中,然后将其传递给ViewCompiler。为此,我有一个自定义元素,就性能而言,它可能并不比compose更好,但它确实允许在使用原始html作为输入时进行更多的控制,并且您可以根据需要进行特定于您的情况的性能优化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import * as markup from "text!./your-element.html";

export class SomeViewModel {
    constructor() {
        this.markup = markup;
    }
}

意见如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <dynamic-html html.bind="markup"></dynamic-html>
</template>

为了完整起见,下面是我封装ViewCompiler的自定义元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {
    customElement,
    TaskQueue,
    bindable,
    ViewCompiler,
    ViewSlot,
    View,
    ViewResources,
    Container,
    ViewFactory,
    inlineView,
    inject,
    DOM
} from "aurelia-framework";

@customElement("dynamic-html")
@inlineView("<template><div></div></template>")
@inject(DOM.Element, TaskQueue, Container, ViewCompiler)
export class DynamicHtml {
    @bindable()
    public html: string;

    public element: HTMLElement;

    private tq: TaskQueue;
    private container: Container;
    private viewCompiler: ViewCompiler;

    private runtimeView: View;
    private runtimeViewSlot: ViewSlot;
    private runtimeViewFactory: ViewFactory;
    private runtimeViewAnchor: HTMLDivElement;

    constructor(element, tq, container, viewCompiler) {
        this.element = <HTMLElement>element;
        this.tq = tq;
        this.container = container;
        this.viewCompiler = viewCompiler;
    }

    public bindingContext: any;
    public overrideContext: any;
    public bind(bindingContext: any, overrideContext: any): void {
        this.bindingContext = bindingContext;
        this.overrideContext = overrideContext;

        if (this.html) {
            this.htmlChanged(this.html, undefined);
        }
    }

    public unbind(): void {
        this.disposeView();

        this.bindingContext = null;
        this.overrideContext = null;
    }

    public needsApply: boolean = false;
    public isAttached: boolean = false;
    public attached(): void {
        this.runtimeViewAnchor = <HTMLDivElement>this.element.firstElementChild;

        this.isAttached = true;
        if (this.needsApply) {
            this.needsApply = false;
            this.apply();
        }
    }

    public detached(): void {
        this.isAttached = false;

        this.runtimeViewAnchor = null;
    }

    private htmlChanged(newValue: string, oldValue: void): void {
        if (newValue) {
            if (this.isAttached) {
                this.tq.queueMicroTask(() => {
                    this.apply();
                });
            } else {
                this.needsApply = true;
            }
        } else {
            if (this.isApplied) {
                this.disposeView();
            }
        }
    }

    private isApplied: boolean = false;
    private apply(): void {
        if (this.isApplied) {
            this.disposeView();
        }

        this.compileView();
    }

    private disposeView(): void {
        if (this.runtimeViewSlot) {
            this.runtimeViewSlot.unbind();
            this.runtimeViewSlot.detached();
            this.runtimeViewSlot.removeAll();
            this.runtimeViewSlot = null;
        }

        if (this.runtimeViewFactory) {
            this.runtimeViewFactory = null;
        }

        if (this.runtimeView) {
            this.runtimeView = null;
        }

        this.isApplied = false;
    }

    private compileView(): void {
        this.runtimeViewFactory = createViewFactory(this.viewCompiler, this.container, this.html);

        this.runtimeView = createView(this.runtimeViewFactory, this.container);

        this.runtimeViewSlot = createViewSlot(this.runtimeViewAnchor);
        this.runtimeViewSlot.add(this.runtimeView);
        this.runtimeViewSlot.bind(this.bindingContext, this.overrideContext);
        this.runtimeViewSlot.attached();

        this.isApplied = true;
    }

}

function createViewFactory(viewCompiler: ViewCompiler, container: Container, html: string): ViewFactory {
    if (!html.startsWith("<template>")) {
        html = `<template>${html}</template>`;
    }
    let viewResources: ViewResources = container.get(ViewResources);
    let viewFactory = viewCompiler.compile(html, viewResources);
    return viewFactory;
}

function createView(viewFactory: ViewFactory, container: Container): View {
    let childContainer = container.createChild();
    let view = viewFactory.create(childContainer);
    return view;
}

function createViewSlot(containerElement: Element): ViewSlot {
    let viewSlot = new ViewSlot(containerElement, true);
    return viewSlot;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39988707

复制
相关文章
55. Python 爬虫(4)
Selenium IDE:是firefox的一个插件,允许测试人员录制脚本并回放。
py3study
2020/01/10
8950
《手把手带你学爬虫──初级篇》第5课 Selenium WebDriver的用法
Selenium 是一个自动化测试工具,WebDriver是它提供的一套操作浏览器的API,由于WebDriver针对多种编程语言都实现了这些API,因此它可以支持多种编程语言。
GitOPEN
2019/01/29
2.7K0
《手把手带你学爬虫──初级篇》第5课  Selenium WebDriver的用法
python3 爬虫第二步Selenium 使用简单的方式抓取复杂的页面信息
网站复杂度增加,爬虫编写的方式也会随着增加。使用Selenium 可以通过简单的方式抓取复杂的网站页面,得到想要的信息。
1_bit
2020/10/23
2.2K0
python3 爬虫第二步Selenium 使用简单的方式抓取复杂的页面信息
Python爬虫学习之天猫商品数据爬虫
天猫商品数据爬虫使用教程 下载chrome浏览器 查看chrome浏览器的版本号,对应版本号的chromedriver驱动 pip安装下列包 pip install selenium pip install pyquery 登录微博,并通过微博绑定淘宝账号密码 在main中填写chromedriver的绝对路径 在main中填写微博账号密码 #改成你的chromedriver的完整路径地址 chromedriver_path = "/Users/bird/Desktop/chromedriv
python学习教程
2019/12/27
1.1K0
【Python秒杀脚本】淘宝或京东等秒杀抢购
我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速提交订单。
全栈程序员站长
2022/08/24
4.2K0
【Python秒杀脚本】淘宝或京东等秒杀抢购
Python之selenium模块
最初是一个自动化测试工具,通过模拟用户来驱动浏览器的一些操作,比如:访问页面,点击按钮,下载,下拉,输入等操作。并且其支持市面上主流的各种浏览器。
Tommonkey
2023/02/25
7090
selenium自动登录某宝
使用selenium登录某宝,套路也很一样,今天就给大家简单的讲哈,只供学习交流哈。
Python知识大全
2020/02/13
9740
selenium自动登录某宝
Selenium + C# 实现模拟百度贴吧签到 2
通过上文的例子,我们对Selenium的用法有了一个简单的印象。接下去我们还是基于这个组件进行模拟百度贴吧签到的功能。
happlyfox
2018/10/31
8610
《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)
对于前端隐藏元素,一直是selenium自动化定位元素的隐形杀手,脚本跑到隐藏元素时位置时报各种各样的错误,可是这种隐藏的下拉菜单又没有办法避免,所以非常头痛,这一篇只为交流隐藏元素自动化定位处理方法以及宏哥自己的一点浅薄见解。
北京-宏哥
2021/12/10
2.8K0
《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)
10分钟教你如何自动化操控浏览器——Selenium测试工具
这几年,Selenium 确实挺火。作为一个 Web 应用程序自动化测试工具,Selenium 可以直接驱动浏览器,模拟真正的用户操作,解决回归测试和多浏览器兼容性测试问题;而且跟 Python 搭配,还能实现不少功能的自动化,切实提升了测试和业务效率。
天道Vax的时间宝藏
2021/08/11
5.7K0
自动化测试如此容易!多语言自动化测试框架 Selenium 编程(C#篇)
Selenium 是功能强大的自动化测试工具集,是支持 Web 浏览器自动化的一系列工具和库的总括项目,一共包括以下三个项目:
痴者工良
2023/03/11
3.9K0
自动化测试如此容易!多语言自动化测试框架 Selenium 编程(C#篇)
解读selenium webdriver
WebDriver可以像用户一样驱动原生浏览器,无论是在本地服务器还是在使用Selenium服务器的远程机器上,都标志着浏览器自动化的一个飞跃。
互联网金融打杂
2022/08/01
6.7K0
解读selenium webdriver
【软件测试】自动化测试selenium(二)
我们可以看到,submit和click的效果是一样的,但是submit存在一定的弊端: 如果点击的元素放在form标签中,此时使用submit实现的效果和click是一样的.如果点击的元素放在非form标签中,此时使用submit会报错! 如下:(此时submit操作的不是from标签下的元素)
xxxflower
2023/10/16
3420
【软件测试】自动化测试selenium(二)
Python Selenium 自动化详解
注意,阅读本文需要有亿点点前端知识才容易理解。要是大佬看到了不会冒犯到吧,不会吧……
NikoDos
2022/04/20
6510
Python Selenium 自动化详解
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
上一篇介绍了POM的基础理论知识和非POM方式写脚本,这篇介绍利用页面工厂类(page factory)去实现POM,通过查看PageFactory类,我们可以知道它是一个初始化一个页面实例的功能,在实例化该页面对象时候,也会一起实例化该页面的元素定位。
北京-宏哥
2022/04/27
7160
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
Selenium
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器,但是现在谷歌的无头比较火,下面展示谷歌的无头)
HammerZe
2022/05/11
3.2K0
Selenium
PHP高级爬虫实践|记一次失败的淘宝自动登录尝试
笔者最近在逛sf.gg的时候,发现了一个关于每天“自动登录淘宝网站”的问题,很久没玩采集数据的我手有点痒痒,于是开始了自动登录淘宝网站的爬虫之旅。
猿哥
2019/07/25
2.1K0
【UI自动化-3】UI自动化元素操作专题
在熟悉了元素定位之后,我们接下来就要学习对定位到的元素进行操作这项内容了。我简要做了个总结,如下图:
云深i不知处
2020/09/16
2.9K0
点击加载更多

相似问题

如何防止ARSCNView在改变方向时旋转

13

如何防止活动在改变方向时重新启动?

31

自定义输入视图:如何防止它们在改变方向时褪色?

23

在改变方向时保存对象

40

在改变方向时旋转ImageButton

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文