media-choice为媒体资源选择组件,基于KnockoutJs。支持图片、语音、视频、图文的选择以及预览,支持默认选择类型,支持是否禁用选择类型的更改。

使用示例:

<script id="media_idTemplate" type="text/html">

<media-choice-button params="value: media_id"></media-choice-button>

</script>

<script id="newsTemplate" type="text/html">

<media-choice-button params="value: media_id,mediaType:5,disabledChoice:true"></media-choice-button>

</script>

参数说明:

value:微信公众号媒体Id

mediaType:默认选择的媒体类型,其中(0:图片;1,语音;2,视频;5,图文)

disabledChoice:是否禁用选择

效果:

全部代码:

var instance = function (params, componentInfo) {
var self = this;
this.Name = ko.observable('请选择素材');
this.Url = ko.observable('/Content/patterns/congruent_pentagon.png');
this.Id = ko.observable('');
//默认选择的类型
this.MediaType = ko.observable('1');
//是否禁用选择框
this.DisabledChoice = ko.observable(false);
//订阅
self.MediaType.subscribe(function (newValue) {
console.debug(newValue);
self.Name('请选择素材');
self.Url('/Content/patterns/congruent_pentagon.png');
self.Id('');
});
this.ShowChoiceWindow = function (data) {
var type = self.MediaType();
var url = '';
switch (type) {
//图文
case "5":
url = '/Site_News?resourceType=5&lightLayout=1';
break;
//图片
case "0":
url = '/Site_Resources?resourceType=0&lightLayout=1';
break;
//语音
case "1":
url = '/Site_Resources?resourceType=1&lightLayout=1';
break;
//视频
case "2":
url = '/Site_Resources?resourceType=2&lightLayout=1';
break;
}
mwc.window.show('选择素材', url);
} if (params && typeof (params.value()) == 'string') {
params.value.subscribe(function (newValue) {
self.Id(newValue);
});
if (params.value().length > 0) {
self.Id(params.value());
mwc.restApi.get({
//请求地址
url: '/Site_Resources/GetJsonDataByMediaId/' + self.Id(),
//是否锁定UI
isBlockUI: true,
//可选,锁定元素
blockUI: componentInfo.element,
//成功函数
success: function (model) {
console.debug(model);
var data = model.FileBase;
if (data == null) {
return;
}
self.MediaType(model.ResourceType);
//一定要放后面,不然因为触发了订阅事件而导致相关数据被清空
self.Name(data.Name);
if (data.FrontCoverImageUrl)
self.Url(data.FrontCoverImageUrl);
else
self.Url(data.Url == null ? data.SiteUrl : data.Url);
self.Id(data.MediaId);
console.debug(ko.toJS(self));
}
});
}
if (params.mediaType) {
self.MediaType(params.mediaType);
}
if (params.disabledChoice) {
self.DisabledChoice(params.disabledChoice);
}
}
window.choice = function (data) {
params.value(data.MediaId);
self.Id(data.MediaId);
self.Name(data.Name);
if (data.FrontCoverImageUrl) {
self.Url(data.FrontCoverImageUrl);
} else
self.Url(data.Url == null ? data.SiteUrl : data.Url);
}
};
var newschoiceViewModelInstance = {
createViewModel: function (params, componentInfo) {
return new instance(params, componentInfo);
}
};
//资源选择
ko.components.register('media-choice-button', {
viewModel: newschoiceViewModelInstance,
template: '' +
'<div class="form-group">' +
'<label class="col-sm-2 control-label">类型:</label>' +
'<div class="col-sm-10">' +
'<select class="form-control" data-bind="value:MediaType,disable:DisabledChoice" data-val="true" data-val-required="类型 字段是必需的。">' +
'<option value="0">图片</option>' +
'<option value="1">语音</option>' +
'<option value="2">视频</option>' +
'<option value="5">图文</option>' +
'</select>' +
'</div>' +
'</div>' +
'<div class="form-group">' +
'<div class="col-sm-12">' +
'<div>' +
'<div class="panel panel-default" data-bind="click:ShowChoiceWindow">' +
'<div class="panel-body" id="content">' +
'<p data-bind="if:MediaType()==0">' +
'<img style="width:150px;height:100px" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==1 && Id()!=\'\'">' +
'<audio style="width:250px;height:100px" controls="controls" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==2 && Id()!=\'\'">' +
'<video style="height:100px !important;width:250px !important" controls="controls" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==5">' +
'<img style="width:150px;height:100px" data-bind="attr:{src:Url}" />' +
'</p>' +
'<div>' +
'<p data-bind="text:Name">' + '</p>' +
'</div>' +
'<!-- ko if:Id()==\"\" && "1,2".indexOf(MediaType())!=-1 -->' +
'<p>' +
'<a class="btn btn-primary btn-block m-t" data-bind="click:$root.ShowChoiceWindow">'
+ '<i class="fa fa-plus">' + '</i>选择素材</a>' +
'</p>' +
'<!-- /ko -->' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>'
});

Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)的更多相关文章

  1. Magicodes.WeiChat——版本发布历史

    购买地址:https://item.taobao.com/item.htm?id=520205558575 您可以在新标签页打开此图,以查看原始图片. Magicodes.WeiChat为湖南心莱信息 ...

  2. Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单

    本人一向比较喜欢折腾,玩了这么久的knockoutjs,总觉得不够劲,于是又开始准备折腾自己了. 最近在完善Magicodes.WeiChat微信开发框架时,发现之前做的自定义菜单这块太不给力了,而各 ...

  3. Magicodes.WeiChat——V3.0(多租户)版本发布

    主要内容如下: 添加项目Magicodes.WeiChat.Data.Multitenant,全面支持多租户(基于EF已经ASP.NET Identity) 增加租户管理.租户成员管理.修改密码.公众 ...

  4. Magicodes.WeiChat——ASP.NET Scaffolding生成增删改查、分页、搜索、删除确认、批量操作、批量删除等业务代码

    关于T4代码生成这块,我之前写过几篇帖子,如:<Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)>(http://www.cnblogs.co ...

  5. Magicodes.WeiChat——使用AntiXssAttribute阻止XSS(跨站脚本攻击)攻击

    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插 ...

  6. Magicodes.WeiChat——后台JS框架封装

    Magicodes.WeiChat同时也致力于提高后台开发效率,因此对在后台前端这块也做了一定的封装.我们先来说说主要的框架JS——mwc.js和mwc_elements.js.这两个JS文件位于Sc ...

  7. Orchard官方文档翻译(九) 新增并管理媒体资源

    原文地址:http://docs.orchardproject.net/Documentation/Adding-and-managing-media-content 想要查看文档目录请用力点击这里 ...

  8. Magicodes.WeiChat——发送模板消息

    在微信开发中,经常会使用到模板消息.因此框架中对此进行了一些封装,并且提供了后台操作界面以及日志查看等功能,下面开始逐步介绍开发操作以及使用. 微信公众平台配置 首先,需要申请开通模板消息功能,如下图 ...

  9. vue仿京东省市区三级联动选择组件

    工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...

随机推荐

  1. nullcon HackIM 2016 -- Programming Question 2

    Your simple good Deeds can save you but your GREED can kill you. This has happened before. This gree ...

  2. Java interview Advanced

    1. Can you override private or static method in Java ? Read more: http://java67.blogspot.com/2012/09 ...

  3. androidannotations 简单配置

    1.build.gradle 需要添加的内容 标注的颜色是新建项目之后,build.gradle文件需要添加的内容. buildscript { repositories { jcenter() } ...

  4. ubuntu 12.04禁用笔记本触摸板

    习惯了在Macbook Pro上使用触摸板,装了个linux 的dualboot,发现,ubuntu下对触摸板的支持实在是太烂了,想禁用触摸板却找不到设置的地方. 终于最后发现了——touchpad- ...

  5. pause 和 title

    -------siwuxie095 pause 暂停批处理程序,并显示:请按任意键继续- 暂停高级技巧: pause>nul 只暂停,不显示任何信息,且光标移到下一行 如果不想用默认提示语:请按 ...

  6. Android Studio 引入 Fresco

    首选在build.gradle文件中配置 查看NDK路径 然后在gradle.properties文件中配置 ndk.path=C\:\\Users\\lixishuang\\AppData\\Loc ...

  7. js获取当前页面信息

    设置或获取对象指定的文件名或路径.<script>alert(window.location.pathname)</script> 设置或获取整个 URL 为字符串.<s ...

  8. mysql术语解释

    数据库(database): 数据表的集合: 数据表 (table):数据的矩阵: 列(column): 相同属性的数据的集合: 行(row): 一个对象的各种属性数据的集合: 冗余():一个字段在多 ...

  9. MFC下无法为空间添加变量解决

    许久不用MFC,今天在vs2008下用MFC写个小东西,结果在为控件添加变量的时候,居然无法成功——那个界面显示怪怪的,点击完成提示失败.    还好同事遇到过这个问题,给出链接http://hi.b ...

  10. ytxgnopyvw

    Rt.不是我的博客被盗了 而是我要测试一下某网站是自动抓取我的博客还是手动抓取. 如果是手动抓取,那么该网站的管理员一定会看见这篇博文, 希望管理员能够自己反省. ytxgn只是为了百度搜索方便罢了.