美文网首页
GRMustache 的使用

GRMustache 的使用

作者: 独木舟的木 | 来源:发表于2020-06-09 18:28 被阅读0次

GRMustache 是用 Objective-C 编写的 Mustache 模板引擎,适用于 MacOS Cocoa 和 iOS。

1. 项目中使用 GRMustache

通过 Cocoapods 导入 GRMustache 时,在 Podfile 文件中添加如下代码:

pod 'GRMustache', '~> 7.3.2'

2. 创建模版文件

创建并编写一个 HTML 模版文件,命名为 template.html 并保存到项目中。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <H1> {{name}} </H1>
    <P> {{content}} </P>
</body>
</html>

模版文件中的标签用双圆括({{tag}})号表示。在以上的模版文件,{{name}}{{content}} 都是标签,你可以把标签理解为占位符,在渲染模版文件时,我们会用动态的文本内容来替换它。

3. 渲染 HTML 内容

首先在代码中将该文件读取到内存中,再使用 GRMustacherenderObject 方法生成渲染后的 HTML 内容:

- (NSString *)renderTemplateWithName:(NSString *)name value:(NSString *)value {
    // 1.读取 template.html 文件
    NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
    NSURL *url = [bundleURL URLByAppendingPathComponent:@"template.html"];
    NSString *template = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    
    // 2.要渲染的数据
    NSDictionary *renderObject = @{ @"name": name, @"content": value };
    
    // 3.生成渲染数据
    NSString *content = [GRMustacheTemplate renderObject:renderObject fromString:template error:nil];
    return content;
}

4. 通过 WKWebView 加载 HTML 内容

使用 GRMustache 模版引擎渲染并生成 HTML 内容后,即可通过 WKWebView 加载 HTML 内容了:

// 通过模版引擎渲染得到内容
NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
NSString *htmlString = [self renderTemplateWithName:@"我是一级标题名称" value:@"我是页面内容"];
[self.webView loadHTMLString:htmlString baseURL:bundleURL];

执行上述代码前,你还需要在视图控制器中添加一个 WKWebView 作为当前视图控制器的子视图。

5. 总结

GRMustache 到底实现了什么功能???

这是我们的 HTML 模版文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <H1> {{name}} </H1>
    <P> {{content}} </P>
</body>
</html>

然后给定以下一个简单的哈希表(JSON 字典):

{
  "name": "我是一级标题名称",
  "value": "我是页面内容"
}

GRMustache 渲染并生成了以下文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <H1> 我是一级标题名称 </H1>
    <P> 我是页面内容 </P>
</body>
</html>

最后,我们再通过 WKWebView 显示该 HTML 文件:

6. 续

以上示例中,使用 GRMustache 中的类方法 renderObject: fromString: error: 时,我们提前将模版文件(即 template.html 文件)作为字符串加载进内存作为模版字符串,然后通过 GRMustache 渲染此模板字符串的对象,最后通过 WKWebView 显示。

这里多了一个预加载模版字符串文件的步骤,那我们能不能省略这一个步骤,直接渲染加载呢?

通过 GRMustache 中的另一个类方法 renderObject: fromResource: bundle: error: 即可实现。而且模版文件也可以写得非常简单,不必完整地声明一个 HMTL 文件。

首先,创建一个名为 template.mustache 的文件,内容如下:

<H1> {{name}} </H1>
<P> {{content}} </P>

然后,修改 GRMustache 引擎渲染方法:

- (NSString *)renderTemplateWithName:(NSString *)name  value:(NSString *)value {
    
    // 1.要渲染的数据
    NSDictionary *renderObject = @{ @"name": name, @"content": value };
        
    // 2.生成渲染数据
    NSError *error = nil;
    NSString *content = [GRMustacheTemplate renderObject:renderObject
                                            fromResource:@"template"
                                                  bundle:nil
                                                   error:&error];
    if (!content) {
        NSLog(@"%@",error);
    }
    return content;
}

最后,通过 WKWebView 加载 HTML 的方法是一样的。重要的是,通过该方法可以达到加载模版字符串一样的效果。

相关文章

  • GRMustache 的使用

    GRMustache 是用 Objective-C 编写的 Mustache 模板引擎,适用于 MacOS Coc...

  • GRMustache

    我们将html文件读取到内存中,在使用GRMustache的方法生成渲染后的HTML内容,就可以通过UIWebvi...

  • GRMustache源码解析

    GRMustache源码解析 Intro GRMustache是一个第三方开源框架,用于支持XML(HTML)文件...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

  • ==的使用

    积累日常遇到的编码规范,良好的编码习惯,持续更新。。。 日常使用==用于判断的时候,习惯性将比较值写前面,变量写后...

网友评论

      本文标题:GRMustache 的使用

      本文链接:https://www.haomeiwen.com/subject/gxeetktx.html